Много ли накладных расходов в пользовательском элементе управления? - PullRequest
4 голосов
/ 13 августа 2010

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

Прежде, чем я начну извлекать пользовательские элементы управления, представляют ли они значительную нагрузку на приложение WinForms по сравнению с простым размещением формы без пользовательских элементов управления (например, только встроенные элементы управления)?

Ответы [ 2 ]

3 голосов
/ 13 августа 2010

Пользовательский элемент управления является контейнером для других элементов управления.Наличие сотен из них, вероятно, означает, что у вас есть несколько сотен окон в вашем проекте.Окно - это очень дорогой объект операционной системы.Они начинают заметно затягивать рисование перфоратора, когда у вас больше 50 или около того.

Сравнение с Outlook подходящее.Это большой размер программы.В нем менее 50 окон.Легко увидеть с помощью Spy ++.

Разница в OnPaint.Microsoft написала много кода, они не оставили много элементов управления в форме.

3 голосов
/ 13 августа 2010

Я был в аду управления пользователями, и это не весело.Несколько вещей, которые я заметил:

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

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

  3. Если у вас большое решение с большим количеством пользовательских элементов управления, VS 2008 займет много времениперечислить все ваши проекты, чтобы найти все возможные элементы управления при первом открытии панели дизайнера.Это довольно незначительное раздражение, но оно может занимать время.

Тем не менее, пользовательские элементы управления, безусловно, удобны и их стоит использовать в модерации.Главное, чего я стараюсь избегать - это слишком глубокое вложение.Я обнаружил, что WPF намного лучше в этом отношении.Он полностью контролирует конвейер рендеринга, поэтому вы не получите проблем с перерисовкой, связанных с глубоким составом элементов управления.

...