数据表内存泄漏
本文关键字:泄漏 内存 数据表 | 更新日期: 2023-09-27 18:10:24
即使数据库没有返回任何数据,下面的代码也会泄漏内存。有人能解释一下这个。net分析器程序显示的罪魁祸首是datatable
吗?using (OleDbDataAdapter da = new OleDbDataAdapter("select * from external_message where status='P' and pendingthread=" + Thread.CurrentThread.ManagedThreadId, conn))
{
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
DataRow dr = dt.Rows[0];
NotificationService.Logger.Write(Logger.RdvLogLevel.Debug, (uint)Thread.CurrentThread.ManagedThreadId, "GetInputs", "Received Message Id {0} Type {1}", dr["MessageId"].ToString(), dr.Field<string>("TargetType"));
return new DatabaseItem { connection = conn, dataRow = dr };
}
else
{
dt.Dispose();
}
}
可能在下面一行导致内存泄漏。你必须处置数据库连接,其中包含一些非托管数据。
return new DatabaseItem { connection = conn, dataRow = dr };
如果它泄漏内存,即使没有数据返回,确保您处置conn
?总是需要处理数据库连接
我不认为这是一个泄漏。这些对象将消耗资源,直到它们被垃圾收集。你的dt.Dispose()会给垃圾收集器提供一个提示,告诉它你的对象不再需要了,但是。net在需要之前不会清理它。
你可以通过调用GC.Collect()来提示垃圾回收器运行,但通常你应该让。net自己清理。
Main函数上的[STAThread]出现问题。删除后一切正常