I'm using the Entity Framework to do insert and update thousands of records.
At first it was slow, but after putting the code below it improved the speed.
db.Configuration.AutoDetectChangesEnabled = false;
db.Configuration.ValidateOnSaveEnabled = false;
Speed Resolved.
However, I can not get to the end because, as you enter, the model is getting bigger and increasing the memory consumption until I get an exception when I reach 1.5GB.
Note: I've already tried to use AsNoTracking()
.
I'm also trying to reload the model from time to time, but it does not lower consumption. It only increases.
Has anyone experienced this or has any ideas?
Part of the code:
foreach (var prd in produtoGradeAux)
{
if (dbPdv.Database.Connection.State != ConnectionState.Open)
dbPdv.Database.Connection.Open();
using (var transaction = dbPdv.Database.Connection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
{
dbPdv.Database.UseTransaction(transaction);
i++
Produto prodAux = null;
var pAux = dbPdv.produto_grade.AsNoTracking().FirstOrDefault(x => x.produto_GradeIdGw == prd.produto_gradeID);
if (prd.cd_grade.Trim().Length > 6)
pAux = dbPdv.produto_grade.AsNoTracking().FirstOrDefault(x => x.cd_grade.Trim() == prd.cd_grade.Trim());
if (prd.cd_grade.Trim().Length > 6)
prodAux = dbPdv.produto_grade.AsNoTracking().Where(x => x.Produto.cd_ref.Trim() == prd.cd_grade.Trim().Substring(0, 6)).Select(x => x.Produto).FirstOrDefault();
int lnFamiliaId, lnGrupoId, lnUnidadeId, lnMarcaId, lnLinhaId;
RetGrupos(prd, out lnFamiliaId, out lnGrupoId, out lnUnidadeId, out lnMarcaId, out lnLinhaId, dbPdv);
if (pAux == null)
{
if (prodAux == null)
prodAux = RetProduto(dbPdv, prd.Produto, lnFamiliaId, lnGrupoId, lnUnidadeId, lnMarcaId, lnLinhaId);
pAux = RetProdutoGrade(dbPdv, prodAux, prd);
SetProdutoEan(dbPdv, prd, pAux);
SetProdutoCf(dbPdv, prd, pAux);
SetProdutoEstoque(dbPdv, lojaAux, prd, pAux);
SetProdutoPreco(dbPdv, prd, pAux);
}
else
{
AtuProdutoGrade(dbPdv, prd, pAux);
AtuProduto(dbPdv, prd, pAux, lnFamiliaId, lnGrupoId, lnUnidadeId, lnMarcaId, lnLinhaId);
AtuProdutoEan(dbPdv, prd, pAux);
AtuProduto_Cf(dbPdv, prd, pAux);
AtuProduto_Preco(dbPdv, prd, pAux);
AtuProdutoEstoque(dbPdv, lojaAux, prd, pAux);
}
transaction.Commit();
//Tentar Melhorar performance...
if (i % 1000 == 0)
{
HabilitaDb(dbPdv);
dbPdv.Dispose();
dbPdv = GetDbPdv(pdvAux);
DesabilitaDb(dbPdv);
}
}
}