将实体框架与 SQL Server Compact Edition 一起使用时出现内存泄漏。我的情况:
我有一个大约 600MByte 大的文件。我逐行阅读,创建一个实体类并将其添加到 SQL Server CE 数据库中。内存因此增长得非常快。Gen 0 Collections 计数器和 Gen 2 Heap Size 增长非常快(来自 Process Explorer 的信息)。如果我理解正确的 Gen 2 Heap 是用于大对象的。我认为我的实体类是一个大对象。所以 Entity Framework 保存我的对象而不释放它们。我已经尝试将它们分离并调用 GC.Collect(2) 但它没有帮助。
首先,我阅读了这条线。然后在解析行后创建一个对象。然后将其添加到数据库。这是我的数据库代码:
DBEntities dbConnection = new DBEntities();
dbConnection.My_Table.AddObject(MyObjectCreatedFromTheLine);
dbConnection.SaveChanges();
// dbConnection.Detach(MyObjectCreatedFromTheLine);
// dbConnection.Dispose();
MyObjectCreatedFromTheLine = null;
dbConnection = null;
我还读到创建的实体类(MyObjectCreatedFromTheLine
)属于DbContext
。所以我为每一行调用这段代码,每次都创建一个新的上下文。
我究竟做错了什么?