Подключение метода.NET для профилирования

Возможный дубликат:
Профилирование метода в C#, чтобы узнать, сколько времени требуется для запуска

Мне нужно проверить, сколько времени занимает запуск метода.

Например, мне нужно знать, сколько времени потребуется, чтобы запустить GetTypes() метод в using System.Reflection в моем проекте.

foreach (Type t2 in a.GetTypes())
{
    Console.WriteLine(t2);
}

Самый простой способ - запустить профилировщик или вставить Stopwatch все исходные файлы, которые используют GetTypes(), но я надеюсь, что смогу использовать перехват метода GetTypes () для запуска и выхода из секундомера до и после запуска метода GetTypes ().

sw = Stopwatch.StartNew();
foreach (Type t2 in a.GetTypes())
{
    Console.WriteLine(t2);
}
sw.Stop();

Могу ли я сделать это с C#/.NET(Mono)? Если нет, у меня есть другие варианты, кроме изменения исходного кода или запуска профилировщика?

1 ответ

С вашим примером:

sw = Stopwatch.StartNew();
foreach (Type t2 in a.GetTypes())
{
    Console.WriteLine(t2);
}
sw.Stop();

вы измеряете намного больше, чем GetTypes, вы измеряете Console.WriteLine и все остальное также.

Написание ловушки (например, Moles), вероятно, слишком сильно повлияет на производительность (однако я должен признать, что я никогда не делал ничего подобного раньше, но я заметил разницу в производительности при запуске модульных тестов с Moles).

Самый простой вариант (и самый дешевый) - скачать один из этих (бесплатных) профилировщиков:

AQTime (бесплатная версия) http://smartbear.com/products/free-tools/aqtime-standard/

SharpDevelop (имеет профилировщик): http://www.icsharpcode.net/opensource/sd/download/

XTE Profiler http://www.xteprofiler.com/

Любой из них даст вам подробную информацию. Но если вы действительно хотите сделать это самостоятельно, загрузите исходники SharpDevelop и попытайтесь выяснить, как они сделали профилировщик.

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