我在使用實體框架和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