2014-09-08 3 views
1

Вызов this.Enabled = false в форме занимает от 140 до 170 мс в наших системах разработки. Многие компьютеры наших клиентов работают медленнее.Как улучшить производительность WinForms при отключении формы?

Наша система работает со многими различными формами. Обычно пользователь видит список элементов и делает двойной щелчок на одном из них. Система отключает текущую форму, асинхронно считывает данные с нашего сервера (это причина отключения формы), и когда данные поступают, отображается новая форма для ее редактирования. Когда пользователь готов, он закрывает текущую форму, и система разрешает предыдущую.

170 мс выглядят очень плохо, если сравнивать с общей суммой времени, которое требуется нашей системе, чтобы открыть новую форму.

Это типичные раз:

  • Отключение текущей формы: 170 мс
  • Получение данных с сервера: 400 мс
  • Отображение новой формы: 200 мс

Получение данных означает доступ к удаленному серверу, сервер считывает информацию из базы данных, выполняющей от 5 до 20 запросов, и возвращает данные. Трудно объяснить, что отключение формы занимает почти 25% времени.

Есть ли способ улучшить время для отключения формы? В качестве альтернативы, что я могу сделать, чтобы избежать того, чтобы мои клиенты щелкали или использовали текущую форму до тех пор, пока информация не будет загружена, а следующая будет показана?

Обновление: Я не упоминал об этом, но я сделал тест, используя только стандартные элементы управления и никакой логики вообще. Форма немного сложна (но ничего сумасшедшего). Он использует tabcontrol с 3 вкладками, и на каждой вкладке я добавил различные элементы управления (графический ящик, текстовые поля, comboboxes, listboxes и т. Д.), В общей сложности около 30 элементов управления на вкладке. Я нажимаю кнопку, а затем я делаю this.Enabled = false в форме. Это занимает от 100 до 120 мс. Наше программное обеспечение более сложное и занимает около 170 мс.

Обновление 2: Я нашел объяснение. Тест проводился в ноутбуке, и энергетический профиль был настроен на балансировку вместо высокой производительности (я не знаю, являются ли эти правильные имена на английском языке). Команда disabled занимает около 100 мс с сбалансированным профилем и 20 мс с высокой производительностью. Это довольно большая разница, так как ноутбук работал с электропитанием, а не с аккумуляторами.

+1

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

+0

Хорошо, извините. Я не упоминал об этом, но я сделал тест, используя только стандартные элементы управления и никакой логики вообще. Форма немного сложна (но ничего сумасшедшего). Он использует tabcontrol с 3 вкладками, и на каждой вкладке я добавил различные элементы управления (графический ящик, текстовые поля, comboboxes, listboxes и т. Д.), В общей сложности около 30 элементов управления на вкладке. Я нажимаю кнопку, а затем я делаю это.Enabled = false в форме. Это занимает от 100 до 120 мс. Наше программное обеспечение более сложное и занимает около 170 мс. – Raul

ответ

0

Я нашел объяснение. Тест проводился в ноутбуке, и энергетический профиль был настроен на балансировку вместо высокой производительности (я не знаю, являются ли эти правильные имена на английском языке). Команда Disabled = false занимает около 100 мс с сбалансированным профилем и 20 мс с высокой производительностью. Это довольно большая разница, так как ноутбук работал с электропитанием, а не с аккумуляторами.

+0

Как вы это определяете? Скорее всего, именно разрешение таймера влияет на ваши результаты. Предотвращение динамического приостановки работы компьютера с возможностями управления питанием приведет к хаосу любых попыток синхронизации. Однако это не обязательно заставит приложение работать медленнее. –