2014-09-19 48 views
1

我正在使用实体框架来对我的数据库执行一些相当复杂的查询。我知道EF首次运行查询,它需要在执行前编译查询。我想衡量这需要多长时间。我在其他地方使用MiniProfiler,我希望只有一个方法可以覆盖并用计时器包装。最好的情况下,某种EF类有一个CompileQuery我可以覆盖的方法。如何测量实体框架编译查询需要多长时间?

是否存在类似这样的事情,还是有另一种方法来衡量实体框架编译查询需要多长时间?

回答

1

您可以尝试使用ToString(),它会将IQueryable转换为SQL语句。

var watch = new Stopwatch(); 
watch.Start(); 
query.ToString(); 
watch.Stop(); 
+0

谢谢。我有几十个这样的语句,我想在生产应用程序中进行监控,因此这意味着需要额外的一些处理(例如,将其转换为查询一次以计算时间,然后再执行)。有什么方法可以将它转换为SQL查询,然后将结果传递给另一个要执行的方法? – user2719100 2014-09-22 16:25:34

+0

@ user2719100,您是否尝试过使用[编译查询](http://msdn.microsoft.com/zh-cn/library/bb896297.aspx)? – 2014-09-22 16:57:17

+0

这就是我想要做的决定。将所有查询转化为编译查询是否值得,如果是的话,哪些是我的优先考虑。从我从你链接的文章中了解到,但是,因为我使用.NET 4.5,所以我已经获得了缓存查询的好处,所以我不确定编译后的查询会有多快。另外,编译查询似乎没有帮助应用程序热身时间,这是我看到最慢的地方(例如,第一次执行查询) – user2719100 2014-09-22 19:30:32