Как лучше всего тестировать программы в Windows? - PullRequest
6 голосов
/ 28 сентября 2008

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

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

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

Ответы [ 6 ]

8 голосов
/ 28 сентября 2008
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");
5 голосов
/ 28 сентября 2008

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

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

4 голосов
/ 01 октября 2009

Если вам нужны только быстрые цифры, вы можете использовать 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
4 голосов
/ 28 сентября 2008

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

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

3 голосов
/ 28 сентября 2008

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

1 голос
/ 15 ноября 2010

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

...