C#-Postgres-随着时间的推移内存泄漏问题
问题:内存会随着时间的推移而泄漏和积累,最终达到99%的容量 这是我之前就同一主题提出的问题。我按照回答的人告诉我的做了,但我仍然遇到内存泄漏问题。我真的不明白记忆是从哪里积累起来的。我观察了C#-Postgres-随着时间的推移内存泄漏问题,c#,postgresql,memory-leaks,C#,Postgresql,Memory Leaks,问题:内存会随着时间的推移而泄漏和积累,最终达到99%的容量 这是我之前就同一主题提出的问题。我按照回答的人告诉我的做了,但我仍然遇到内存泄漏问题。我真的不明白记忆是从哪里积累起来的。我观察了Windows任务管理器,发现内存会定期清除,但内存累积速度比清除速度快,因此,最终内存容量达到99% 这是我的C#代码: var connString = "Host=x.x.x.x;Port=5432;Username=postgres;Password=password;Database=databa
Windows任务管理器
,发现内存会定期清除,但内存累积速度比清除速度快,因此,最终内存容量达到99%
这是我的C#
代码:
var connString = "Host=x.x.x.x;Port=5432;Username=postgres;Password=password;Database=database";
@Info.Trace("PostGre ");
using (var conn = new Npgsql.NpgsqlConnection(connString)){
conn.Open();
int ctr = 0;
// Insert some data
using (var cmd = new Npgsql.NpgsqlCommand())
{
cmd.Connection = conn;
var par_1 = cmd.Parameters.Add("@r", NpgsqlTypes.NpgsqlDbType.Timestamp);
var par_2 = cmd.Parameters.Add("@p", NpgsqlTypes.NpgsqlDbType.Double);
while(@tag.TerminateTimeScaleLoop == 100)
{
@Info.Trace("Pushed Data: PostGre A " + ctr.ToString());
cmd.CommandText = "INSERT INTO TORQX VALUES (@r,@p)";
par_1.Value = System.DateTime.Now.ToUniversalTime();
par_2.Value = @Tag.RigData.Time.TORQX;
cmd.ExecuteNonQuery();
ctr = ctr + 1;
}
}
@Info.Trace("Pushed Data: PostGre A Terminated");
conn.Close();
}
是什么导致了记忆的积累?我可以防止它累积吗?如果无法防止累积,我可以手动清除内存吗?哪套代码可以做到这一点
我几乎没有使用
C#
的经验,我被指派对此C#
代码进行热修复,因为编写此代码的人现在不在。我在Python
方面有很多经验,但在C#
方面没有经验,所以请以非常明确的方式给我建议。。。否则我就不知道了。谢谢 这些痕迹有什么作用?否则,这段代码中的任何内容都不会导致任何持久内存使用。未使用的内存就是浪费内存。随着GC堆的增长,CLR将回收和重用可用ram。它上升到99%并不是出现问题的迹象,尤其是在处理任何规模的sql数据库时。