如何持续测量 EF 性能?
Posted
技术标签:
【中文标题】如何持续测量 EF 性能?【英文标题】:How to continuously measure EF performance? 【发布时间】:2016-08-26 10:24:46 【问题描述】:我有一个使用 Entity Framework 4 的大型应用程序。它是服务器上的 WCF(托管在 Windows 服务内)和客户端上的 WPF。 它的某些部分很慢,我想知道是不是因为数据库访问很慢。 我想持续测量该代码的性能,例如在某处记录每个查询的执行时间(最好包括 EF 自己的东西,如物化)以便稍后分析。我怎么做? 像 EFProf 这样的工具(因为即使他们可以测量数据库服务器执行特定查询所花费的时间,我如何运行它们一周?)和 Glimpse(它不支持 Windows 服务和 WPF)在我的情况下不支持。 我考虑过制作自己的 SqlConnection 子类,但我的版本只接受 ObjectContext ctor 中的 EntityConnection,并且 EntityConnection 被标记为密封。而且这个选项只允许测量原始 sql 查询的执行时间,而不是 EF 的代码。 我现在看到的唯一选项是:1)更新到 EF 6 并编写 SqlConnection 子类(这不会测量 EF 自己的代码)2)更新到更高版本并使用类似EF hooks library 当然,它不在书上(只看 Mastering Enity Framework)——因为我们大多数人只需要使用库,不知道它有多快(讽刺)。
【问题讨论】:
要查看执行的查询日志,您不必编写 SqlConnection 子类,设置context.Database.Log = Console.WriteLine;
就足够了。只需将 Console.WriteLine
替换为您自己的日志操作即可。但正如你所说,这只能让你测量查询执行时间,而不是 EF 代码。
为什么不配置数据库呢?如果您看到具有高 IO 或持续时间的查询,请通过调整 DB 对象(如索引)或找到 EF 语句并对其进行调整来调整这些查询。
@Igor 数据库本身可能不是问题
@AdilMammadov 我认为需要更新到 EF6
看看怎么样:getglimpse.com
【参考方案1】:
在 linq 表达式缓存和 SQL 服务器选择缓存的内容方面都进行了各种优化,唯一的方法是衡量您的性能速度和内存消耗
对于您的情况,我认为微软通过“Measuring Entity Framework Performance using ETW”提供了一种简单的方法
此外,您可以通过 SQL 分析器获取其中一些信息,这只是更多的工作。
【讨论】:
你忘了说它需要更新到 EF 6。不过,它看起来是个不错的选择以上是关于如何持续测量 EF 性能?的主要内容,如果未能解决你的问题,请参考以下文章