我在使用实体框架和SQL Server Compact Edition时出现内存泄漏。我的情况:内存泄漏实体框架
我有一个约600MByte大的文件。我逐行阅读它,创建一个实体类并将其添加到SQL Server CE数据库中。记忆力正在迅速增长。 Gen 0 Collections计数器和Gen 2堆大小增长非常快(来自Process Explorer的信息)。如果我理解正确的第二代堆是为了大件物品。我认为我的实体课是一个大对象。所以实体框架保存我的对象,不释放它们。我已经尝试分离它们并调用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
。所以我为每一行调用这个代码,每次创建一个新的上下文。
我在做什么错?
您应该只使用一个上下文,将所有对象添加到上下文中,然后调用'SaveChanges'一次。还可以使用'using'语法糖强制在你的上下文实例中调用Dispose'。 – ken2k 2012-07-12 11:35:58
你为什么不处理你的dbConnection? – KingCronus 2012-07-12 11:36:38
我使用了dbConnection.Dispose(),但它没有帮助。同样在开始时,我只用了一个上下文,问题也是一样的。然后我读到,然后问题是这个情节保持指向这些对象的指针。所以我尝试这种方式,每次创建一个新的上下文。 – 2012-07-12 12:13:10