需要有关比较2个等效linq和sql查询的性能的建议

时间:2010-03-14 21:35:59

标签: linq-to-sql performance

我正在研究优化linq to sql查询的工具。基本上它拦截linq执行管道并进行一些优化,例如从查询中删除冗余连接。当然,在dbms中执行查询之前执行时间会有开销,但是,应该更快地处理查询。我不想使用sql profiler,因为我知道生成的查询在dbms中的性能会比原始查询更好,我正在寻找一种正确的方法来测量在linq中创建查询之间的全局时间。执行结束。目前,我正在使用秒表类,我的代码看起来像这样:

var sw = new Stopwatch();
sw.Start();
const int amount = 100;
for (var i = 0; i < amount; i++)
{
   ExecuteNonOptimizedQuery();
}
sw.Stop();
Console.Writeline("Executing the query {2} times took: {0}ms. On average, each query took: {1}ms", sw.ElapsedMilliseconds, sw.ElapsedMilliseconds / amount, amount);

基本上,ExecutenNonOptimizedQuery()方法创建一个新的DataContext,创建一个查询,然后迭代结果。

我为查询的两个版本执行了此操作,正常版本和优化版本。我从弗朗斯布马的this帖子中接受了这个想法。

我应该采取其他方法/考虑因素吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以在分析器下运行。但是,经过检测的构建会影响代码的性能,可能会扭曲结果(在SQL Server中占用总执行时间的很大一部分很可能)。采样分析器可能有所帮助。 (Visual Studio Team System探查器可以同时执行这两项操作。)

对于使用Stopwatch的方法进行比较的隔离测试通常是首选方法。您可以从秒表时间中删除SQL事件探查器中的时间显示,以获取客户端代码中的时间(包括后处理)。