数据表内存泄漏

本文关键字:泄漏 内存 数据表 | 更新日期: 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]出现问题。删除后一切正常