Подключение метода.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 и попытайтесь выяснить, как они сделали профилировщик.