2012-02-27 2 views
2

У меня есть приложение C#, и есть много форм с элементами управления.
И каждый раз, когда я запускаю свое приложение, формы, у которых много элементов управления, работают медленно.
Итак, есть ли способ открыть его быстрее?Как быстро открыть winform?

+0

Сколько стоит «много элементов управления»? Как медленно «открыта медленная»? –

+1

Как насчет загрузки невидимых форм, а затем просто «Show()» их при необходимости? – Jason

+0

Что вы делаете в методе загрузки формы? Сколько заявлений вы выполняете на своих элементах управления? – AngeloBad

ответ

4

Как вы можете видеть из комментариев, есть не один универсальный «делать вещи быстрее» техник. Вам нужно найти узкое место и исправить это. Вот некоторые указатели:

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

  • У вас есть сотни элементов управления на одной форме? Если да, рассмотрите разделение форм на более мелкие куски.

  • У вас есть сложная логика или доступ к данным во время событий Form_Load? Это также может замедлить отзывчивость пользовательского интерфейса. Попробуйте запустить приложение «clean», а затем загрузите данные асинхронно.

  • Используйте профайлер! Найдите хороший простой профайлер, чтобы узнать, где именно вы тратите свое время. Вы часто будете удивлены тому, что на самом деле требует времени. Используйте пробную версию хорошего, профайлера, например dotTrace или Ants, и подумайте о покупке его на будущее.

1

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

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

+0

Как насчет библиотеки параллельных задач! ;] – Jason

0

Учитывая указанную информацию при условии я wolud сказать:

разделит управление в возможных группах (это практически невозможно, что пользователю нужно всех управления одновременно) и поместить их в отдельном Tabs управлении вкладкой ,
Автоматически (по умолчанию) загружает только элементы управления на fisrt Tab, для других загружает их динамически. В этом случае, если пользователю не нужна определенная функциональность, он никогда не переключится на вкладку, которая содержит его, поэтому элементы управления этой функциональностью, которые пользователь не нужен, не будут загружены, что обеспечит в целом более быстрое время загрузки ,

Если есть данные, которые должны быть выдвинуты на контроле, загрузите его в асинхронном пути, где это возможно,

Надеется, что это помогает.

-2

Лучший способ отделить решение многих слоев

YourAppUI contains forms 
YourApp.Controls contains controls 
YourApp.BLL contains business logic 
YourApp.DAL contains data access layer 
+1

Как это ускорит загрузку формы? – jgauffin

+0

Загрузка 30 МБ exe медленнее, чем 1 МБ –

+2

Объем информации не изменился, просто был разделен между несколькими сборками. Загрузка нескольких сборок происходит медленнее, чем загрузка одного .exe. – jgauffin

2

В случае, если вы делаете что-то timeconsuming код с элементами управления в виде конструктора или во время загрузки формы Вы можете написать this.SuspendLayout(); перед этим кодом и this.ResumeLayout(); после этого кода.Это предотвращает несколько операций макетирования времени.

0

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

Простым действием, которое может вам многое рассказать, является перемещение доступа к данным в событие form_shown.

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