У нас есть приложение C# WinForms, которое довольно медленно и часто потребляет 50% процессорного времени.Профилирование профилей WinForms
Используя DotTrace, мы выяснили, что наиболее трудоемкие задания относятся к потоку пользовательского интерфейса. В частности, System.Windows.Forms.DataGridView.WndProc (Message &) потребляет больше всего времени.
Я знаю, что программа вызывает Invoke или BeginInvoke в элементах управления DataGridView. Это равносильно отправке сообщения в элемент управления DataGridView. Но время, затрачиваемое на вызывающий поток для отправки этих сообщений, довольно мало, наибольшее время тратится на поток пользовательского интерфейса для обработки этих сообщений.
Так dotTrace может понять, что самое трудоемкое задание находится в потоке пользовательского интерфейса, но не может определить, какие потоки отправляют эти сообщения.
Итак, что я могу сделать, чтобы найти эти темы?
«У нас есть приложение для Winform C#, которое довольно медленно. Оно часто предполагает 50% процессорного времени». - действительно ? если бы он был действительно медленным, я ожидал бы, что шипы будут намного выше ... У вас есть какая-то «буря обновления UI»? Под этим я подразумеваю, обновления UI запускают другие обновления и каскад ... –
@MitchWheat Да, я использовал диспетчер задач Windows для мониторинга программы. Использование ЦП всегда составляет около 50%. На самом деле, программа является торговой платформой. Он постоянно получает информацию о котировках, информацию о статусе заказа и т. Д. Извне, выполняет некоторые вычисления и затем обновляет пользовательский интерфейс. Мы пишем автоматическую торговую праграмму, поэтому она выпускает около 100 заказов каждую секунду. Мы обнаружили, что он не может быстро обрабатывать все входящие сообщения. Поэтому нам нужно выяснить, что является узким местом. Если это пользовательский интерфейс, нам нужно выяснить, что вызывает обновление пользовательского интерфейса и может замедлить частоту обновления. – rmm2014
У вас может быть событие в DataGridVew, которое имеет длинные процессы и/или запускает несколько раз или, возможно, бесконечно активируется, например, когда изменяется значение ячейки или добавляется строка. – Jade