Каков наилучший способ тестирования программ в Windows?

Мне нужно сделать некоторые тесты производительности на .NET-программах (С#) в Windows, но я не тестировал много в мире Windows. Я изучил использование монитора производительности Windows 2000/XP с пользовательскими счетчиками для этого, но я не думаю, что это совсем то, что я хочу.

Есть ли какие-либо хорошие системные возможности для этого в Windows XP, или мне нужно просто использовать System.Diagnostics.Stopwatch [edit] и писать текстовые журналы для ручной интерпретации, или есть что-то еще?

Изменить: есть ли что-нибудь за пределами System.Diagnostics.Stopwatch?

Ответ 1

Для микро-бенчмаркинга мне очень нравится MeasureIt (можно скачать из http://msdn.microsoft.com/en-us/magazine/cc500596.aspx). Это тестовый проект, написанный Вэнсом Моррисоном, исполнительным архитектором в CLR. В настоящее время он имеет хороший набор эталонных тестов для ряда основных методов .Net/CLR. Лучшая его часть заключается в том, что тривиально настраивать и добавлять новые тесты для того, что вы хотели бы протестировать. Просто запустите "MeasureIt/edit", и он запустит VS с проектом для себя, чтобы вы могли просмотреть, как эти тесты записываются, и добавлять новые по-другому, если хотите.

Как уже было сказано, StopWatch, вероятно, самый простой способ сделать это, и MeasureIt использует StopWatch под его тайминги, но он также выполняет некоторые другие функции, такие как запуск блока кода X раз, а затем предоставление вам статистики для прогонов, а что нет.

Ответ 2

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");

Ответ 3

Существует довольно много профилировщиков. Вот некоторые из тех, о которых я знаю:

Если вы продолжите использовать System.Diagnostics.Stopwatch, вы сможете измерить и измерить только определенные точки вашего кода, где вы прямо ставите Start/Stop. Это достаточно хорошо для измерения конкретных фигур, например, плотной петли или подобных вещей, но это не даст вам полной картины того, где ваша программа проводит большую часть своего времени.

Ответ 4

Если вам нужны только некоторые быстрые номера, вы можете использовать Powershell для выполнения всего времени. Используйте командлет measure-command. Это примерно эквивалентно "времени" в 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

Ответ 5

Это может быть не то, что вы хотите, но dotTrace предлагает много полезных диагностических средств и интегрируется в Visual Studio.

Ответ 6

Если ваш проект довольно большой, и есть много модулей, которые делают большое количество звонков, вы можете: http://www.moduleanalyzer.com/