У меня занят пользовательский интерфейс WinForms, в который поступают данные из разных источников. Поскольку только поток пользовательского интерфейса может обновлять элементы управления в пользовательском интерфейсе, эти потоки вносят новые промежуточные структуры данных обновления данных, которые поток пользовательского интерфейса читает и затем использует для обновления элементов управления в форме.
Чтобы избежать проблем с параллелизмом, мы блокируем структуры данных при чтении и записи из них.
Все в приложении работает нормально, но пользовательский интерфейс может быть довольно медленным и медленным, особенно когда мы получаем довольно мало данных, поступающих быстро. Я думаю, что это происходит потому, что пользовательский интерфейс тратит довольно много времени на ожидание получения блокировок.
Я знаю, что могу использовать ProcessThread.TotalProcessorTime для измерения использования потоков, но проблема в том, что это не включает время ожидания при блокировках. Таким образом, это хорошая мера того, насколько занят поток UI в однопоточном мире, но как только вы включили блокировку, числа смещаются вниз по мере увеличения времени, которое поток пользовательского интерфейса тратит на ожидание получения блокировок. И это именно те времена, когда ожидают блокировки, когда пользовательский интерфейс будет не отвечать.
Я полагаю, в двух словах, это сводится к снижению уровня конкуренции в приложении Winforms.