2009-10-15 78 views
1

我有一個C#應用程序,我正在測試3種方法來處理XML。程序執行速度測試

我讀了一串XML獲取一個值,然後將其添加到自定義集合中。

我正在測試XMLDocument,XDocument和字符串操作來查找節點值,按順序記錄每個節點的開始和結束時間。

但是,如果我說混合訂單,我會得到不同的速度報告。另外,當我再次按下按鈕再次執行測試時,最初速度最慢的測試有時在隨後的測試中佔用最少。

我確定它的所有內容都與JIT和垃圾收集有關,但確定最快運行速度的最真實的方法是什麼?

我已經下載了EQATEC分析器,但是我失去了如何處理它。

有人可以告訴我最好的方法來確定什麼方法運行最快。

感謝

回答

0

嘗試使用像紅門ANTSdotTrace從JetBrains的一個分析工具。分析器將顯示每種方法花費的時間百分比,以便您確定哪種方法執行得更快。

+1

它必須是一個自由的恐懼。 – Jon 2009-10-15 11:19:24

+1

你可以隨時使用試用版嗎? – Kane 2009-10-15 12:28:15

1

對於具有一組採樣輸入的每種方法,在使用StopWatch來測量時間的情況下,它不夠嗎?

+0

多數民衆贊成我所做的事情,但是如果我改變圍繞ie/TestString,TestXdoc,TestXML的處理執行所需的時間是不同的,如果我運行TestXML,TestXDoc,TestString爲什麼? – Jon 2009-10-15 11:34:54

+0

你丟棄了第一個結果嗎? – Simon 2009-10-15 11:51:52

+0

我猜想第一種方法最慢?您應該運行單獨的測試,例如1000次帶樣本文件的TestXML,然後計算平均值。重複TestXDoc,然後使用TestString並比較結果。 – Philippe 2009-10-15 12:09:40

0

學會用你擁有的工具:

http://www.eqatec.com/tools/profiler/guide

如果您收到不一致的結果,做科學的事情,使控制情況:在

  • 要麼多次測試因此第一種情況在其餘運行
  • 之間取平均值或僅測試第一種情況(每次重新啓動應用程序)。
0

您可以使用Michael McMillian的「Data structures and algorithms using c#」中的Timing類。

粗略這將是如下:

TimeSpan startingTime, duration; 
GC.Collect(); 
GC.WaitForPendingFinalizers(); 
startingTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime; 
DoLengthyWork(); 
duration = Process.GetCurrentProcess.Threads(0).UserProcessorTime.Subtract(startingTime); 
1

喬恩斯基特寫測量這樣簡單的操作,一個相當不錯的bechmarking「框架」,我覺得這是非常適合於檢查每個這些方法,你可以在這裏找到:http://www.yoda.arachsys.com/csharp/benchmark.html(注意,這只是對操作進行計時,而不是分析堆使用情況或類似的情況)。

需要牢記的一點很重要(喬恩在上面的網站上提到它,每當主題出現時,Eric Lippert都喜歡提及它)是當你多次運行代碼時,它只會獲得JIT'd第一次,所以如果你想測量每種方法的真實差異,至少測量兩次,並比較第二次運行 - 我會想象這是你的轉換命令的結果。