我大约有 400,000 条来自文件的记录。但是在插入 30000 到 33000 条记录后,它会抛出错误“System.OutOfMemoryException”
在我的系统中,我有 8gb 的内存,我认为这已经足够了。我使用此代码一次插入一堆记录,例如 500 条记录。
this._context.AutoDetectChangesEnabled = false;
if(Counter % 500 == 0)
_context.SaveChanges();
我尝试了所有可能的更改并进行了大量研发,并且还在此堆栈溢出站点上找到了所有可能的解决方案,但它无济于事。
我基本上在这种情况下使用 nopcommerce 使用
private readonly IDbContext context;
如果有任何困惑,也请告诉我!
public partial class EfRepository<T> : IRepository<T> where T : BaseEntity
{
private IDbContext _context;
private IDbSet<T> _entities;
protected virtual IDbSet<T> Entities
{
get
{
if (_entities == null)
_entities = _context.Set<T>();
return _entities;
}
}
public virtual void Insert(IEnumerable<T> entities, bool enableTrackChanges = true)
{
try
{
if (entities == null)
throw new ArgumentNullException("entities");
if(!enableTrackChanges)
{
this._context.AutoDetectChangesEnabled = false;
}
foreach (var entity in entities)
this.Entities.Add(entity);
this._context.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
throw new Exception(GetFullErrorText(dbEx), dbEx);
}
finally
{
if (!this._context.AutoDetectChangesEnabled)
this._context.AutoDetectChangesEnabled = true;
}
}
}