Как узнать, сколько времени требуется приложению Windows Forms на C #?

У меня есть приложение Windows Forms на C #, которое позволяет управлять камерой и компьютерным зрением. Для всех деталей, которые требуют больше времени для расчета, я использовал отдельные нити. Но есть еще некоторые части, которые находятся в функциях обратного вызова графического интерфейса. Насколько я понимаю, все эти callback-функции выполняются в одном потоке. Есть ли способ узнать, сколько времени этот поток работает или простаивает? Какой процент времени простоя требуется, чтобы графический интерфейс оставался отзывчивым?


person user3005031    schedule 25.02.2014    source источник
comment
вы можете использовать эту идею, упомянутую в следующем вопросе: stackoverflow.com/questions/9954571/   -  person Monah    schedule 25.02.2014


Ответы (2)


Это рекомендуется, чтобы вы не блокировали поток пользовательского интерфейса более чем на 50 мс, иначе это повлияет на отзывчивость пользовательского интерфейса. То есть, два обратных вызова пользовательского интерфейса, поставленные в очередь с Form.BeginInvoke, выполнение каждого из которых занимает ~ 50 мсек, могут вызвать у пользователя неприятные впечатления от пользовательского интерфейса.

Нет смысла обновлять пользовательский интерфейс чаще, чем пользователь может на это отреагировать (т.е. ~ 24 кадра в секунду). Итак, вам следует ограничить обратные вызовы потока пользовательского интерфейса и дать приоритет событиям ввода пользователя.

Недавно я опубликовал пример того, как это можно сделать:

https://stackoverflow.com/a/21654436/1768303

person noseratio    schedule 25.02.2014

Для простых задач вы можете использовать секундомер и измерять время вручную. Однако я думаю, вам нужно проверить, что такое профилировщик производительности.

Также - есть небольшие ситуации, в которых вашему графическому интерфейсу требуется такая тяжелая обработка. В большинстве случаев проблема возникает из-за того, что слишком много вычислений помещается в обработчики событий вместо того, чтобы реализовывать их где-то снаружи, а затем обновлять форму по завершении. Это не столько проблема с одним / несколькими потоками, сколько с правильным использованием доступных событий.

person Tarec    schedule 25.02.2014