Каков наилучший способ тестирования программ в 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/