2008-09-28 2 views
6

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

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

Редактировать: есть ли что-либо за пределами System.Diagnostics.Stopwatch?

+0

Так что другие люди могут извлечь выгоду из дополнительных ответов, я думаю, было бы лучше вы должны снова открыть вопрос. – 2008-09-28 03:26:07

+0

Агг, еще один урок в параллелизме пошел не так ... – 2008-09-28 03:26:40

ответ

5

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

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

8
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

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

4

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

Если вы идете с помощью 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 
1

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

Смежные вопросы