Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF SaveChanges运行太慢_C#_Sql Server_Entity Framework_Entity Framework 6_Sql Insert - Fatal编程技术网

C# EF SaveChanges运行太慢

C# EF SaveChanges运行太慢,c#,sql-server,entity-framework,entity-framework-6,sql-insert,C#,Sql Server,Entity Framework,Entity Framework 6,Sql Insert,我正在尝试使用EF6MVC插入大约2000-5000条记录,其中包含60个字段 这是我的代码: using (var db = new MyEntities()) { using (var transaction = db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable)) { try { db.Database.CommandTimeout

我正在尝试使用EF6MVC插入大约2000-5000条记录,其中包含60个字段

这是我的代码:

using (var db = new MyEntities())
{
    using (var transaction = db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
    {
        try
        {
            db.Database.CommandTimeout = 180;

            // ToInsertStatement is an ExtensionMethod
            // which generates a sql INSERT statement from list of entities
            // in *N* batch size.
            // INSERT INTO tbl values(),()*N*(); INSERT INTO...
            db.Database.ExecuteSqlCommand(entitiesList.ToInsertStatement(20));

            // Some other changes
            db.SaveChanges();
            transaction.Commit();
        }
        catch (Exception exception)
        {
            transaction.Rollback();
        }
    }
}
根据Emir的说法,我每发送20条记录,其中包含一条INSERT语句,幸运的是,
ExecuteSqlCommand
只需6秒钟。但是
SaveChanges()
大约需要2分钟


我如何克服这个问题?

我看了一下。我将批量大小(我的意思是插入中的值计数)更改为100,只需20秒!批量大小为50,只需9秒!(有2500项记录)。和爱慕者一样,我不知道为什么?!实际上,我发现插入中的最佳行数约为20。(这取决于列数。阅读我看了一下。我将批大小(插入中的值计数)更改为100,只需20秒!50个批大小,只需9秒!(2500条记录)。和Admir一样,我也不知道为什么?!实际上,我发现插入中的最佳行数约为20。(这取决于列数。阅读