jac*_*ric 5 .net c# database sql-server entity-framework
我开发了一个客户端.NET WinForms应用程序.此应用程序用于使用数千条记录填充数据库.对于数据层,我使用EF6.
当我在本地工作并运行应用程序时,每件事都按预期工作.插入速度非常快(约2分钟内超过500000条记录).
现在我正在尝试在托管服务器上使用远程数据库,我注意到插入非常慢(大约2分钟内少于500条记录).这意味着比本地慢1000倍.
如果我尝试使用SQL Server Management Studio在远程数据库中插入500条记录,则操作将在不到1秒的时间内完成.
我的客户端应用程序出现问题吗?
这里的插入功能:
public void SetDemoDimCustomer()
{
DWContext dc = null;
try
{
dc = DWContext.Create(SqlServerInstance, DbName);
dc.Configuration.AutoDetectChangesEnabled = false;
dc.Database.ExecuteSqlCommand("DELETE FROM DimCustomer");
dc.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('DimCustomer', RESEED, 0)");
DimCustomer objCustomer;
List<DimCustomer> lstDemoCustomers = new List<DimCustomer>();
int length = 100;
for (int i = 0; i < length; i++)
{
objCustomer = new DimCustomer();
objCustomer.Name = "Customer " + (i + 1);
objCustomer.CustomerBKey = (i + 1).ToString();
lstDemoCustomers.Add(objCustomer);
}
dc.DimCustomer.AddRange(lstDemoCustomers);
dc.SaveChanges();
}
catch (Exception)
{
throw;
}
finally
{
if (dc != null)
{
dc.Dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用Linq-to-SQL而不是EF6,但结果是一样的.也许不是特定的EF6问题.
有关远程系统的一些信息:
提前致谢.
在与BULKINSERT进行一些测试后更新
好的,这是我第一次使用BulkInsert测试的结果:
当然,现在,EF6 BulkInsert包是我项目的一部分.
看起来大部分时间都花在网络上等待往返完成.EF不能制作批量插入(尚未).所以你不能在这里使用EF.
研究这个问题的典型解决方案(TVP和SqlBulkCopy).
您使用的配置模式不是一个好的选择.只需包装' dcusing`并删除所有异常处理.