【问题标题】:How to determine if EF is in Cold or Warm execution state?如何判断 EF 是处于 Cold 还是 Warm 执行状态?
【发布时间】:2016-10-19 19:15:49
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# entity-framework performance-testing


    【解决方案1】:

    我希望entity framework profiler 是您想要的工具。

    【讨论】:

    • 可能不会,因为我看不出这将如何适应现有的分析设置。我对我的问题的答案更感兴趣。再加上它要花钱。
    【解决方案2】:

    没有生命周期事件或任何您可以挂钩的东西来确定冷查询与热查询执行。根据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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 2021-12-08
      • 2015-06-01
      • 2011-04-16
      • 2014-03-11
      相关资源
      最近更新 更多