Dar*_*rek 5 sql entity-framework
我有一个非常简单的edmx模型,一个数据库和一个实体用于一个数据库表.测试从本地虚拟数据库服务器顺序检索所有记录.
using System;
using System.Linq;
namespace ConsoleApplication1
{
using System.Diagnostics;
private static readonly ConcurrentBag<long> Stats = new ConcurrentBag<long>();
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
var sw = Stopwatch.StartNew();
using (var ctx = new ScratchEntities())
{
foreach (var invoice in ctx.Invoices.Select(
s => new
{
s.Id,
s.Amount,
s.DueDate
}))
{
}
}
sw.Stop();
Stats.Add(sw.ElapsedMilliseconds);
}
Console.WriteLine("Min {0} Max {1} Avg {2}", Stats.Min(), Stats.Max(), Stats.Average());
}
}
Run Code Online (Sandbox Code Playgroud)
在EF 4和5下,执行大约需要2-2.5秒.升级到Nuget的EF6,差不多10秒.
在类似的说明中,与foret over ctx.Invoices.Select(s => new {all columns here})相比,当我使用foreach而不是ctx.Invoices时,它也需要4-5倍.
困惑.
更新:
迭代5次
EF 6.0.1 Min 3082 Max 9231 Avg 4462.8
EF 5.0.0 Min 1502 Max 2016 Avg 1665.4
1M行的所有时间(以毫秒为单位).
.Net 4.5
更新2:
丢弃105中的前五个测试
EF 6.0.1 Min 2698 Max 4383 Avg 3136
EF 5.0.0 Min 1426 Max 2922 Avg 1628
更新3:
After recreating TT templates per advise here
EF 6.0.1 Min 2589 Max 4279 Avg 3027
After compiling EF6 with NGEN described here
EF 6.0.1 Min 2644 Max 4322 Avg 3045.7
UPDATE 4:
After changing to AsEnumerable
EF 6.0.1 Min 2661 Max 4658 Avg 3134.6
| 归档时间: |
|
| 查看次数: |
2903 次 |
| 最近记录: |