我们有一段代码使用lib EntityFramework.BulkInsert-ef6-ext 进行批量插入。 我们面临一些性能问题:完成一些工作+插入数据的整个过程大约需要 150ms 。这看起来很像我的开发者机器,只有我在工作。 我假设在我们的生产服务器上,这个过程要慢得多,因为它上面有很多流量。
我的第一个假设是,当只有几个数据行时,批量插入作为单个插入的速度较慢。
我设置了一个小型测试应用程序,用于跟踪插入过程中的时间。 以下是我的1行结果:
探查:
但是查看我的c#代码中的跟踪时间会显示完全不同的图片:
批量:85毫秒
单身:130毫秒
现在出现两个问题:
最后这是我的测试代码:
static void Main(string[] args)
{
var sw = new Stopwatch();
long t1, t2 = 0;
using (var ctx = new TestContext())
{
var list = new List<Customer>();
for (int i = 0; i < 1; i++)
{
list.Add(new Customer());
}
sw.Start();
ctx.BulkInsert(list);
ctx.SaveChanges();
}
sw.Stop();
t1 = sw.ElapsedMilliseconds;
sw.Reset();
using (var ctx = new TestContext())
{
var trx = new TransactionScope();
ctx.Configuration.LazyLoadingEnabled = false;
ctx.Configuration.AutoDetectChangesEnabled = false;
ctx.Configuration.ValidateOnSaveEnabled = false;
var list = new List<Customer>();
for (int i = 0; i < 1; i++)
{
ctx.Customer.Add(new Customer());
}
sw.Start();
ctx.SaveChanges();
trx.Complete();
trx.Dispose();
}
sw.Stop();
t2 = sw.ElapsedMilliseconds;
}
最好的问候,Josef