Когда я просматриваю свое приложение C# в Visual Studio 2010, в представлении «Линия» вторая функция времени занимает много времени, как System.Windows.Forms.Application.DoEvents(). 7-е место в списке - System.Windows.Forms.Form.ShowDialog(). Эти два потребляют около 8% и 2,5% от общего количества эксклюзивных образцов.Профилирование производительности Visual Studio: Application.DoEvents()
В программе не так много взаимодействия с пользователем. Пользователь нажимает кнопку, и приложение запускается и запускает свои алгоритмы около минуты, а затем останавливается. В течение этого периода нет взаимодействия с пользователем, однако есть большой процессор и использование ввода-вывода.
Я не уверен, что понимаю, почему вышеупомянутые две функции (DoEvents и ShowDialog) захватывают так много эксклюзивных образцов. Есть ли что-то, что можно сделать для этих двух?
EDIT для уточнения: Приложение имеет 4 разных темы. Один поток считывает данные с внешнего устройства и помещает его в очередь. Другой поток, считывает данные из очереди и выполняет манипулирование данными. Этот интенсивный поток cpu помещает управляемые данные в другую очередь. Третий поток читает эту очередь и регулярно записывает данные на диск. Все потоки реализованы в качестве фона. Конечная (4-я) нить является самой основной формой приложения(). Он фактически неактивен в течение всего процесса.
События обновления и обновления Windows могут быть обработаны при вызове DoEvents. Картина Windows довольно медленная, но не о чем беспокоиться. – CodingBarfield