簡體   English   中英

在Windows中對程序進行基准測試的最佳方法是什么?

[英]What's the best way to benchmark programs in Windows?

我需要在Windows中對.NET程序(C#)做一些性能基准測試,但我還沒有在Windows世界中做過很多基准測試。 我已經研究過使用帶有自定義計數器的Windows 2000 / XP性能監視器,但我認為這不是我想要的。

在Windows XP中是否有適用於此的良好系統設施,或者我是否需要使用System.Diagnostics.Stopwatch [編輯]並編寫文本日志以進行手動解釋,或者還有其他什么?

編輯:除了System.Diagnostics.Stopwatch還有什么嗎?

using System.Diagnostics;
....

Stopwatch sw = new Stopwatch();

sw.Start();

// Code you want to time...

// Note: for averaged accuracy (without other OS effects), 
//       run timed code multiple times in a loop 
//       and then divide by the number of runs.

sw.Stop();

Console.WriteLine("Took " + sw.ElapsedTicks + " Ticks");

對於微基准測試,我非常喜歡MeasureIt(可以從http://msdn.microsoft.com/en-us/magazine/cc500596.aspx下載)。 這是由CLR的性能架構師Vance Morrison編寫的測試項目。 它目前為許多.Net / CLR核心方法提供了一套很好的基准。 最好的部分是,無論你想測試什么,調整和添加新基准都是微不足道的。 只需運行“MeasureIt / edit”,它就會自動啟動VS項目,以便您可以查看這些基准測試的編寫方式,並以類似的方式添加新的基准測試。

正如已經說明的那樣,StopWatch可能是最簡單的方法,而MeasureIt使用下面的StopWatch作為其時間,但它也做了一些其他的事情,比如運行一段代碼X次,然后為運行提供統計數據,而不是。

那里有很多個人。 以下是我所知道的一些內容:

如果繼續使用System.Diagnostics.Stopwatch,您將能夠只測量和測量代碼的特定點,您可以在其中明確地設置Start / Stop。 這足以測量特定的部分,比如緊湊的循環或類似的東西,但它不會讓你全面了解你的程序花費大部分時間的位置。

如果您只想要一些快速數字,可以使用Powershell來計算整體執行時間。 使用measure-command cmdlet。 它大致相當於Unix中的“時間”。

> measure-command { your.exe arg1 }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 996
Ticks             : 49963029
TotalDays         : 5.78275798611111E-05
TotalHours        : 0.00138786191666667
TotalMinutes      : 0.083271715
TotalSeconds      : 4.9963029
TotalMilliseconds : 4996.3029

這可能不是您想要的,但dotTrace提供了許多有用的診斷並集成到Visual Studio中。

如果您的項目非常龐大並且有很多模塊在進行大量通話,您可以: http//www.moduleanalyzer.com/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM