C# 实体框架将查询结果具体化为实体花费了多少时间?
我是否可以测量EntityFramework从Db加载后具体化单个对象或对象列表所花费的时间 有什么建议吗C# 实体框架将查询结果具体化为实体花费了多少时间?,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我是否可以测量EntityFramework从Db加载后具体化单个对象或对象列表所花费的时间 有什么建议吗 谢谢 你不能得到你想要的东西。但这是可以估计的。实体框架在执行查询时会执行多个操作,例如: 元数据加载 视图生成 参数评估 查询翻译 物化器生成 数据库查询执行 对象物化 身份查找 但是,当您执行热查询(第二次查询执行)时,大多数加载和生成将被以下查找所取代: 元数据查找 查看查找 参数评估 查询查找 物化器查找 数据库查询执行 对象物化 身份查找 在这种情况下,大多数步骤的成本都很低,除
谢谢 你不能得到你想要的东西。但这是可以估计的。实体框架在执行查询时会执行多个操作,例如:
// Let Entity Framework to load metadata, generate views and etc.
using (TestContext context = new TestContext())
{
var query = context.Set<Message>().AsNoTracking();
Message first = context
.Set<Message>()
.AsNoTracking()
.FirstOrDefault();
}
// Execute warm query
using (TestContext context = new TestContext())
{
// Log the queries to be able to subtract query execution time.
context.Database.Log = Console.WriteLine;
var query = context.Set<Message>().AsNoTracking();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Restart();
Message first = query.FirstOrDefault();
stopwatch.Stop();
Console.WriteLine("Elapsed {0} milliseconds.", stopwatch.ElapsedMilliseconds);
}
//让实体框架加载元数据、生成视图等。
使用(TestContext=newtestcontext())
{
var query=context.Set().AsNoTracking();
消息优先=上下文
.Set()
.AsNoTracking()
.FirstOrDefault();
}
//执行热查询
使用(TestContext=newtestcontext())
{
//记录查询以便能够减去查询执行时间。
context.Database.Log=Console.WriteLine;
var query=context.Set().AsNoTracking();
秒表秒表=新秒表();
stopwatch.Restart();
Message first=query.FirstOrDefault();
秒表;
WriteLine(“经过的{0}毫秒。”,stopwatch.elapsedmillisons);
}
然后,您可以从总运行时间中减去查询执行时间(从日志中),并将其除以2
有关更多信息,请参阅。我认为这是一种合理的方法。实体生成不仅仅包括生成CLR对象。关系修复也会发生(即使使用
AsNoTracking
,我猜这是一个相对昂贵的过程。即使我们有合适的挂钩(我们没有),也很难获得所有这些步骤的详细测量值。黑盒方法是我们能得到的最好方法。感谢@GertArnold的支持)