如何确定EF是处于冷执行状态还是热执行状态

本文关键字:执行状态 于冷 何确定 EF | 更新日期: 2023-09-27 18:13:45

我正在尝试测量Stowpatch类的性能,包括数据库操作,但据我所知,EF的性能还取决于冷执行状态和热执行状态。

我想在性能日志上记下某个输出是EF当时所处状态的结果。

是否有一个生命周期事件,我可以钩到或什么?

如何确定EF是处于冷执行状态还是热执行状态

我希望实体框架分析器是您正在寻找的工具。

没有生命周期事件或任何您可以挂钩的东西来确定冷查询和热查询执行。根据实体框架4、5和6的性能考虑:

第一次对给定模型进行任何查询时实体框架在后台做了很多工作来加载和验证模型。我们经常将第一个查询称为a"冷"查询。对已加载模型的进一步查询如下被称为"热"查询,并且快得多。

因此,如果您想测量冷查询和热查询的性能,请执行两次查询,并使用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;

Second Query Execution - warm Query

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;