【发布时间】:2009-08-25 16:23:20
【问题描述】:
我正在使用 C# 和 OBDC DSN 连接到 Paradox 数据库。如果我打开和关闭每个连接,我似乎正在泄漏内存。
我的代码基本上是:
csb.Dsn = "DNSName";
OdbcConnection con = new OdbcConnection(csb.ConnectionString);
con.Open();
OdbcCommand comm= new OdbcCommand("SELECT * FROM Tabl", con);
OdbcDataReader reader= null;
try
{
reader= comm.ExecuteReader();
for (int count = 0; (count < 5 && reader.Read()); ++count)
{
//Read
}
}
finally
{
if (reader!= null)
{
reader.Close();
reader.Dispose();
}
if (comm!= null)
{
con.Close();
con.Dispose();
OdbcConnection.ReleaseObjectPool();
GC.Collect();
comm.Dispose();
}
}
有什么想法或建议吗?
更新 1
我将其更改为使用 statments,仍然泄漏。
【问题讨论】:
-
如果 comm 为空,您将不会关闭连接。我看不出这里怎么会发生这种情况,但您可能想检查 con 是否为空并关闭/处置它,而不是检查 comm。另外,建议你看看 using 关键字。
-
您使用什么来确定您的应用程序正在泄漏内存?
-
内存使用率不断攀升,而且很快,然后当我停止所有线程时,它永远不会回到基线,或者根本没有下降。
-
您使用哪种 Paradox ODBC 驱动程序? GC.Collect 不应该是必要的。
-
哇,这是一个旧线程,但我遇到了同样的问题 - 使用块并不能解决问题。有人有什么新鲜想法,或者 OP 找到解决方案了吗?
标签: c# memory-management memory-leaks odbc paradox