Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top