2010-03-14 55 views
1

我正在開發優化LINQ到SQL查詢的工具。基本上,它攔截linq執行管道,並進行一些優化,例如從查詢中刪除冗餘連接。當然,在查詢在dbms中執行之前,執行時間會有一些開銷,但是應該更快地處理查詢。我不想使用sql分析器,因爲我知道生成的查詢將在dbms中比原始查詢更好地執行,我正在尋找一種正確的方法來測量在linq中創建查詢和執行結束。目前,我使用秒錶類和我的代碼看起來是這樣的:需要關於比較2等效LINQ到SQL查詢性能的建議

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,創建一個查詢,然後遍歷結果。

我對查詢的兩個版本都是這樣,普通版和優化版。我從Frans Bouma的this發佈了這個想法。

我應該採取其他方法嗎?

在此先感謝!

回答

1

您可以在探查器下運行。但是,構建好的構建會影響代碼的性能,可能會扭曲結果(在SQL Server中執行時間的很大一部分,這很可能)。採樣分析器可能會有所幫助。 (Visual Studio Team System分析器可以同時執行這兩個操作。)

對於使用Stopwatch進行比較的獨立測試通常是首選方法。您可以從秒錶時間中刪除SQL Profiler中的時間顯示,以獲取客戶端代碼(包括您的後期處理)的時間。

+0

感謝您的回答! – uvita 2010-03-15 00:20:48