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

时间:2016-10-19 19:15:50

标签: c# entity-framework performance-testing

我正在尝试使用import xml.dom.minidom as xml def pretty_html(helper, indent=' '): declaration = len(xml.Document().toxml()) + 1 doc = xml.parseString(helper.xml()) return doc.toprettyxml(indent=indent)[declaration:] div = DIV(SPAN(INPUT(...)), SPAN(INPUT(...))) code = CODE(pretty_html(div)) 类测量性能,包括数据库操作,但据我所知,EF性能还取决于冷和热执行状态。

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

是否有可以挂钩的生命周期事件或什么?

2 个答案:

答案 0 :(得分:0)

我希望entity framework profiler是您提供的工具。

答案 1 :(得分:0)

没有生命周期事件或任何可以挂钩来确定冷查询和热查询执行的事件。根据{{​​3}}:

  

第一次针对给定模型进行任何查询时,   实体框架在幕后加载和做了很多工作   验证模型。我们经常将此第一个查询称为   “冷”查询。针对已经加载的模型的进一步查询   被称为“温暖”的查询,速度更快。

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