Как лучше всего тестировать программы в Windows?

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

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

Обновлено: есть ли что-нибудь помимо System.Diagnostics.Stopwatch?

Чтобы другие люди могли получить дополнительные ответы, я думаю, что вам будет лучше снова открыть вопрос.

Michael Ratanapintha 28.09.2008 07:26

Агх, еще один урок параллелизма пошёл не так, как надо ...

Michael Ratanapintha 28.09.2008 07:26

@ Майкл Ратанапинта: нужно уточнить?

Ben Collins 28.09.2008 07:30

Когда я начал писать свой первый комментарий, вопрос все еще был закрыт, но когда я его разместил, вы его снова открыли.

Michael Ratanapintha 28.09.2008 07:32

Ох, хорошо. Я просто закрыл его, чтобы можно было быстро отредактировать, чтобы предотвратить поток "используйте секундомер!" Комментарии. Я уже знал о секундомере.

Ben Collins 28.09.2008 07:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
5
6 501
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

Вы также должны отделить первый прогон от усредненных результатов, так как он может быть сильно искажен из-за процесса JIT-компиляции.

Ed S. 05.06.2011 09:17

Эд. СУБЪЕКТ: Хорошее замечание, но не обязательно. Если в действительности код выполняется только один раз, то, вероятно, необходимо учесть время JIT.

Mitch Wheat 05.06.2011 09:21

Конечно, я не хотел полностью игнорировать эту информацию, просто чтобы убедиться, что она отделена, чтобы она не увеличивала средний показатель. Пока человек, проводящий тест, знает об этом факте, все будет в порядке. Я настраивал процедуру синтаксического анализа XML, которая может быть вызвана для некоторых довольно больших фрагментов данных (в любом случае относительно того, что типично для моего приложения), и первый проход занял ~ 931 мс, в то время как все последующие вызовы заняли ~ 91 мс.

Ed S. 05.06.2011 09:28

Чему соответствует одна галочка?

Harshit Jain 06.05.2015 21:10

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

Профайлеров довольно много. Вот некоторые из них, о которых я знаю:

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

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме