【发布时间】:2016-10-19 19:15:49
【问题描述】:
我正在尝试使用 Stowpatch 类测量性能,包括数据库操作,但据我了解,EF 性能还取决于冷执行状态和热执行状态。
我想在性能日志上记下某个输出是 EF 当时处于哪个状态的结果。
是否有我可以挂钩的生命周期事件或其他什么?
【问题讨论】:
标签: c# entity-framework performance-testing
我正在尝试使用 Stowpatch 类测量性能,包括数据库操作,但据我了解,EF 性能还取决于冷执行状态和热执行状态。
我想在性能日志上记下某个输出是 EF 当时处于哪个状态的结果。
是否有我可以挂钩的生命周期事件或其他什么?
【问题讨论】:
标签: c# entity-framework performance-testing
我希望entity framework profiler 是您想要的工具。
【讨论】:
没有生命周期事件或任何您可以挂钩的东西来确定冷查询与热查询执行。根据Performance Considerations for Entity Framework 4, 5, and 6:
第一次对给定模型进行任何查询时, 实体框架在后台做了很多工作来加载和 验证模型。我们经常将第一个查询称为 “冷”查询。针对已加载模型的进一步查询是 称为“暖”查询,并且速度更快。
因此,如果您想衡量冷查询和热查询的性能,请执行两次查询并使用System.Diagnostics.Stopwatch 确定第一次和后续执行查询所用的时间。
第一次查询执行 - 冷查询
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
using(var db = new MyContext())
{
var q1 = from c in db.Customers where c.Id == 1 select c;
var c1 = q1.First();
}
stopWatch.Stop();
TimeSpan coldts = stopWatch.Elapsed;
第二次查询执行 - 暖查询
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
using(var db = new MyContext())
{
var q1 = from c in db.Customers where c.Id == 1 select c;
var c1 = q1.First();
}
stopWatch.Stop();
TimeSpan warmts = stopWatch.Elapsed;
【讨论】: