我有一個基準測試應用程序來測試我寫了一些API的性能不同的表現。在這個基準測試應用程序中,我基本上使用QueryPerformanceCounter,並通過在調用API之後和之前將QPC值的差異除以頻率來獲得時間。但是基準測試結果似乎有所不同如果我從不同的驅動器運行應用程序(在同一套Dll上運行相同的可執行文件)。另外,在特定的驅動器上,第一次運行應用程序,關閉應用程序並重新運行它會產生不同的基準測試結果。誰能解釋這種行爲?我在這裏錯過了什麼嗎?運行託管應用程序第二次表現出了比第一次
一些更多有用信息:
的行爲是這樣的:運行該應用程序,關閉它,並重新運行它,在基準測試結果看來,以提高對第二次運行和以後保持不變。這種行爲在從C驅動器運行的情況下更爲突出。 我還想提一下,我的基準測試應用程序可以選擇重新運行/重新測試特定的API,而無需關閉應用程序。我確實知道存在着點擊事件,但我不明白的是,在第一次運行應用程序時,如果您多次重新運行API而未關閉應用程序,則在運行幾次後性能會穩定下來,然後關閉並重新運行同樣的考驗,表現似乎有所改善。
此外,如何做到從不同的驅動器上運行,當你考慮性能的變化?
[信息更新]
我做了一個NGEN現在不同的運行從同一位置消失之間的性能差異。即如果我打開基準測試應用程序,運行一次,關閉它並從同一位置重新運行它,它會顯示相同的值。
但現在我已經遇到的另一個問題。當我從D驅動器啓動應用程序並運行它幾次(在基準編程的同一次啓動中幾次API迭代),然後從第三次迭代開始,所有API的性能似乎下降了大約20% 。然後,如果關閉並重新啓動應用程序並運行它,對於前2次迭代,它會給出正確的值(與從C獲得的值相同),然後性能再次下降。從C驅動器運行時看不到此行爲。從C盤開始,無論你運行多少次運行,它都是非常一致的。
我使用大雙陣列來測試我的API的性能。我擔心GC會在測試之間進行,所以我在每次測試之前和之後明確地呼叫GC.Collect()& GC.WaitForPendingFinalizers()。所以我不認爲它與GC有任何關係。
我試着使用AQ時間知道什麼從3日開始迭代發生,但有趣的是,當我運行與AQ時間剖析它的應用程序,性能不倒的。
如不提出任何有趣的IO活動的性能計數器。
感謝 NIRANJAN
科裏對一個可能的問題做出了正確的回答。但是,如果您可以詳細說明結果,則會有所幫助。例如,如果第二輪是WORSE,那麼這是一個不同的故事。 :) – BobbyShaftoe 2009-01-23 06:14:11
道歉以前不描述。行爲如下: 運行應用程序,關閉它並重新運行一次,基準測試結果在第二次運行中似乎有所改善,此後保持不變。這種行爲在從C驅動器運行的情況下更爲突出。 – 2009-01-23 08:31:59