首页 > 解决方案 > 以存储库模式和工作单元批量插入数据库,性能最佳

问题描述

我想在我的存储库中插入 800k 行,然后提交。我将每 15k 条记录发送到存储库并提交它,但它太慢了。

        foreach (var imei in command.IMEIItems) {

            var newIMEI = new IMEI(imei.IMEINumber, command.PromotionId);
            _imeiRepository.Add(newIMEI);
        }

        _unitOfWork.Commit();

我的问题是关于 foreach 循环。添加到存储库中太慢了。提交很快。

我的存储库:

         public virtual TEntity Add(TEntity entity)
    {
        if (entity != null)
        {
            TEntity addedTEntity = ObjectSet.Add(entity); // add new item in this set
            return addedTEntity;
        }
        else
        {
            throw new ArgumentNullException();
        }

    }

     protected virtual IDbSet<TEntity> ObjectSet
    {
        get
        {
            return _unitOfWork.CreateSet<TEntity>();
        }
    }

     public virtual IDbSet<TEntity> CreateSet<TEntity>() where TEntity : 
      class
    {
        return base.Set<TEntity>();
    }

标签: c#performanceentity-frameworkrepository-patternunit-of-work

解决方案


一个建议,假设您的 Repo 方法是线程安全的 -

Parallel.for考虑到您的大数据量,您可以尝试使用。像这样的东西

但是,如果您的数据大小相对较小,则Parallel.For考虑到 CPU 上下文切换开销,a 可能效率较低。

因此,可能值得检查输入集合的大小,然后在普通 for 和并行 for 之间做出决定,


推荐阅读