有没有办法将LinqToSql配置到我可以看到查询在数据库中占用多长时间以及映射到对象需要多长时间?
我正处于一个闪电般快速查询的位置,据我可以从SQL Profiler判断但是从应用程序端缓慢调用,我想知道它是否是DataReader>对象映射很慢。
答案 0 :(得分:4)
欢迎来到我们的世界!是的,我们也见过这个。在测量它时,我们编写了MvcMiniProfiler,它可以包装标准的数据库连接/命令/阅读器等(因为ADO.NET对装饰友好非常友好);所以我们可以通过以下方法测量LINQ开销:
using(MiniProfiler.Current.Step("Getting awesome data")) {
var data = {your query that materializes data, i.e. ToList() etc }
}
然后MvcMiniProfiler将向您展示“获取精彩数据”的时间等,以及在SQL查询中花费的时间等。
我们发现通常存在很大的差距,即使使用ExecuteQuery<T>(sql, args)
,(以及一些CPU活动探测)让我们强烈怀疑物化是罪魁祸首(特别是在高使用率下运行时);例如,我们可以看到由于开销导致的4ms查询占用80 + ms - 因此LINQ丢失了76ms。因此,我们编写了dapper-dot-net,它在削减物化成本方面做得非常出色。 4ms查询再次需要4ms。
举个例子:
cols(我只包含2行,所以缺少标题):
步骤名称|此步骤中的时间(ms)|偏离开始(ms)| sql | sql(ms)中的时间
正如您所看到的,运行sql需要1.3ms,步骤需要1.8ms,因此需要0.5ms的开销。 “1 sql”实际上是指向已执行的sql(带参数/值)的超链接。你可以在没有痛苦的情况下全天候运行它(....我们这样做。)
答案 1 :(得分:2)
是的,使用Linq2SqlProfiler http://l2sprof.com/ ..我用这个来检查命中次数和执行时间等。
检查网站上的使用详情..
如果您正在寻找sql server profiler,那么谷歌代码上有一个开源下载。
检查以下另一个ASP.NET MVC Mini Profiler的stackoverflow thread链接
在此处查看MVC Mini Profiler:http://code.google.com/p/mvc-mini-profiler/