2016-06-28 7 views
1

enter image description hereКак определить поток в приложении, который использует 100% использование ЦП в PerfMon?

enter image description here

Попытка точно настроить/оптимизировать C# приложение. Пробежал PerfMon, и я последовательно получаю всплеск 100% на некоторые операции. Я могу получить номер экземпляра потока из PerfMon, но из Окно потока Visual Studio 2015 при отладке, как узнать, какой поток является соответствующим?

Или я об этом ошибаюсь? Я хочу узнать время от времени, которое время от времени используется в использовании процессора. Спасибо заранее!

+1

Ну, конечно, вы идете по нему не так. Никогда ничего плохого в потоке, который держит ядро ​​занятым и заканчивается в кратчайшие возможные промежутки времени. Вы должны быть гораздо больше озабочены тем, какие другие темы, которые, похоже, ничего полезного не делают. Достаточно легко видеть с помощью отладчика. И не стесняйтесь использовать [правильный инструмент] (https://msdn.microsoft.com/en-us/library/dd537632.aspx). –

+0

Как сказано выше, нет ничего плохого в использовании 100% CPU. Даже простой цикл, который работает более 1-2 секунд, получит 100% использование. Большая разница заключается в том, делает ли цикл какой-то расчет или просто ждет байта на последовательном порту (например) без сна. – i486

+0

Спасибо, ребята. Я провел целый день с Process Explorer. Начнем с создания параллелизма. Спасибо, что указал мне в правильном направлении. Правильный инструмент определенно важен. @HansPassant – f0rfun

ответ

4

Отказ от ответственности: Я работаю профайлинга в Visual Studio

Я хотел бы присоединиться к процессу с помощью отладчика Visual Studio, а затем вызвать диагностическое окно инструментов (так как вы заявили, вы используете VS 2015). Если вы перейдете на вкладку «Использование ЦП», вы можете включить профилирование ЦП, воспроизвести свою проблему, а затем разбить процесс. Это заставит профилировщика проанализировать собранный след. Наконец, вы можете удалить фильтр, который позволит вам фильтровать дерево вызовов по потоку. Мы также перечисляем использование ЦП с помощью идентификатора потока, чтобы вы могли использовать это, чтобы выяснить, какой поток выполняет эту работу, и что он делал.

1

Для этого я бы использовал Process Explorer. Свойства процесса (двойной щелчок по открываемому процессу) имеет вкладку потоков. Это может быть отсортировано по процессору или циклам, а также кнопка для моментального снимка стека потоков.

Он также использует символы отладки для разрешения содержимого этого стека.

Это значительно облегчает определение кода, в котором работает поток.

Другим вариантом будет PerfView из средств отладки Windows: это дает еще больше данных (но имеет более крутую кривую обучения).