2014-02-10 2 views
0

У меня Windows Form, который я использую для торгового приложения, которое, по необходимости, должно отображать большое количество информации, обновляющейся очень быстро (4 раза в секунду).Как сделать сильно заполненный C# интерфейс формы Windows более отзывчивым

Форма Windows, которую я использую, имеет множество элементов управления (более 150 кнопок и текстовых полей) и 6 datagridviews с несколькими строками для отображения информации.

У меня есть разные потоки для выполнения трудоемких операций (HTTPRequests и различных математических операций), но я все еще нахожу, что графический интерфейс кажется вялым. Я заметил, в частности, что когда я добавляю больше элементов управления в форму, все замедляется, хотя эти дополнительные элементы управления действительно «делают» что угодно.

Может ли кто-нибудь объяснить, почему простое наличие дополнительных элементов управления должно сделать GUI менее отзывчивым и/или рекомендовать совершенно другой подход? Может быть, я не должен использовать Windows Forms?

Спасибо.

+5

Рассмотрите возможность использования WPF. – SLaks

+0

Пользовательский интерфейс по-прежнему связан с одним потоком и одним насосом сообщений, который будет помешать вам, как предположил @SLaks, и переходя в WPF. – Lloyd

+0

Вы начинаете асинхронные HTTP-запросы в потоке пользовательского интерфейса? – spender

ответ

1

Трудно сказать что-то конкретное, не зная вашего кода.

Несколько общих идей:

  • Из вашего описания, это звучит для меня, как ваше приложение очень занято перекрашивать все элементы управления. Попробуйте поэкспериментировать с SuspendLayout() и ResumeLayout() и Invalidate() только те элементы управления, которые действительно нуждаются в перекраске.
  • Проверьте, включено ли значение DoubleBuffering как в форме (-ах), так и в ChildControls, она должна быть активирована для большинства элементов управления по умолчанию. Но убедитесь, что у вас есть это.
  • В зависимости от используемой проверки .NET Frameworkversion, если вы можете использовать функции async/ await для поддержания активности.
  • См. Статью Статья в MSDN Magazine «Give Your .NET-based Application a Fast and Responsive UI with Multiple Threads». Это несколько дней, но все же абсолютно справедливо.
  • Некоторые events увольняются чаще, чем вы ожидаете или нуждаетесь. Проверьте те события, которые вызывают перерисовку элементов управления (т. Е. Это будет то место, где вы добавляете значения, отображаемые пользователю), если они слишком часто срабатывают.
+0

+1 для DoubleBuffering, если я помню, что это НЕ включено для форм по умолчанию. – Matt

0

Ваши органы управления занимают много памяти, и я удивляюсь, почему у вас так много, вы считали, что вы создаете элементы управления на лету, когда и когда это необходимо. Двойная буферизация является обязательной, но не поможет, если вы забиваете память так же, как и для графического отображения. Вам нужно профилировать свою программу с помощью счетчиков производительности, чтобы выяснить, в чем проблема, вы правильно распоряжаетесь? Также вы используете слишком много потоков? Вы используете пул потоков, если не хотите! Контролируются ли ваши элементы управления данными? Я подумаю, что еще кое-что, но профилирование - это то, что вам нужно сделать дальше.

Смежные вопросы