我有一个使用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) – 因为我们大多数人只需要使用一个库,而不知道它有多快(讽刺). 最佳答案 在linq表达式缓存和SQL服务器选择缓存的内容中,都进行了各种优化,唯一的方法是测量性能速度和内存消耗
对于你的情况,我认为微软通过“Measuring Entity Framework Performance using ETW”提供了一种简单的方法
此外,您可以通过SQL分析器获得一些此信息,这只是更多的工作.