Любой инструмент, который говорит, сколько времени занимает каждый метод?

некоторые части моей программы очень медленные. и мне было интересно, есть ли инструмент, который я могу использовать, и, например, он может сказать мне, нормально, что для выполнения methodA () потребовалось 100 мс и т. д. ... или такая полезная информация, похожая на эту.

 dtb22 сент. 2010 г., 22:46
Это называетсяProfiler.
 GrandmasterB22 сент. 2010 г., 22:46
То, что вы ищете, называется профилировщиком.
 dtb22 сент. 2010 г., 22:47

Ответы на вопрос(4)

Вот один, например:пример

в «Инструментах производительности» есть встроенный профилировщик. Существует масса полезного фона по этому вопросуэтот блог.

Я нашел это чрезвычайно полезным в определении20% моего кода, который выполняется 80% времении, следовательно, что я должен беспокоиться об оптимизации.

Другая простая техника, которая может быть удивительно эффективной, - это запустить ваш код выпуска в отладчике и прерывать его несколько раз (10 или около того может быть достаточно), пока он находится в состоянии «занято», который вы пытаетесь диагностировать. Вы можете найти информацию о повторяющихся стеках вызовов, которая направляет вас к общей проблемной области. Опять же, действует правило 80/20.

 Steve Townsend23 сент. 2010 г., 18:09
@ Майк - спасибо.
 Steve Townsend23 сент. 2010 г., 15:00
@ Майк Данлавей - у тебя есть лучший? Я буду редактировать, если так. Спасибо
 Mike Dunlavey23 сент. 2010 г., 14:38
К сожалению, ссылка 80/20 особенно бессмысленна.
 Mike Dunlavey23 сент. 2010 г., 16:36
Ссылки на это почти не существуют по некоторым причинам:stackoverflow.com/questions/3743504/...
 Mike Dunlavey23 сент. 2010 г., 03:58
+1 Я использовал этот метод прерывания еще до того, как были созданы профилировщики. Я был озадачен, что так мало людей знали это. Я бы сказал, что это на самом деле определяет проблемную область, а правило 80/20 больше похоже на 99,9 / 0,1.
 Steve Townsend23 сент. 2010 г., 16:43
@Mike - твоя статья онлайн?
 Mike Dunlavey23 сент. 2010 г., 17:25
Я только что отправил тебе копию по электронной почте. Боюсь, вы найдете его довольно сухим.

SD C # Profiler, Он может обеспечить время выполнения функции самой функцией и / или всеми ее вызываемыми.

Решение Вопроса

Секундомер, который можно использовать для определения времени частей вашего кода (думайте о нем как о «профайлере для бедняков»).

Вот как вы бы это использовали:

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // Start timing

// This is what we want to time
DoSomethingWeSuspectIsSlow();

stopwatch.Stop();
Console.WriteLine("It took {0} ms.", stopwatch.ElapsedMilliseconds);
 Steve Townsend22 сент. 2010 г., 23:05
@John Gardner - ваша конструкция также очень полезна для получения нужных результатов из работающей системы Prod. Скопируйте время для частей рабочего элемента с помощью тега, который их идентифицирует, и сбросьте в конце рабочего элемента.
 Fredrik Mörk22 сент. 2010 г., 23:05
Также убедитесь, что метод был вызван хотя бы один раз перед синхронизацией, чтобы вы не измеряли время JIT-компиляции.
 John Gardner22 сент. 2010 г., 23:02
или, создайте класс, который реализует idisposable, который запускает таймер при конструировании, останавливает и записывает при утилизации. Затем вы можете рассчитать любой блок кода, обернув его оператором использования!

Ваш ответ на вопрос