Kap*_*ija 9 entity-framework entity-framework-4.1
我正在尝试使用Entity框架保存数十万条记录.保存几十万条记录后,我得到以下错误:
:为System.OutOfMemoryException
我的代码
foreach (BibContent objbibcontents in lstBibContent)
{
db.BibContents.AddObject(objbibcontents);
c = c + 1;
if (c == 1000)
{
db.SaveChanges();
c = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到在保存了1000条记录后,我的数据库没有覆盖另外1000条记录.它将它们添加到我的dbcontext中.
我在1000条记录后创建了一个新实例,但我的数据库仍然具有上一个对象的数据.看我的代码
foreach (var objbibcontents in lstBibContent)
{
vibrantEntities db1 = new vibrantEntities(szConStr);
lstBibCon.Add(objbibcontents);
// db.BibContents.AddObject(objbibcontents);
c = c + 1;
if (c == 1000)
{
foreach (BibContent bibobject in lstBibCon)
{
db1.BibContents.AddObject(bibobject);
}
lstBibCon.Clear();
db1.SaveChanges();
c = 0;
flag = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
Lad*_*nka 12
您要保存多少个对象以及单个对象有多大?DbContext保存对您通过AddObject调用添加的所有对象的引用.调用SaveChanges不会清除其内部数据结构,因此如果为1M对象调用代码,则内存中将包含1M对象,并且它们将完全处于活动状态,因为它们的GC根对象将是仍在运行代码范围内的上下文实例.
如果要避免内存问题,则应为每1000条记录(甚至每条记录)使用一个新的上下文实例.运行SaveChanges1000条记录和单条记录之间的唯一区别是自动涉及的事务.
| 归档时间: |
|
| 查看次数: |
8877 次 |
| 最近记录: |