2009-12-10 2 views
1

У меня есть масштабируемый интерфейс формы, такой как MS Word. Форма содержит +70 элементов управления (Richtextbox, флажок и т. Д.), Которые расположены по всей форме.Кэширование форм или ускорение формирования формы

Проблема в том, что получение формы занимает 2,5 секунды. Добавление 70 элементов управления с помощью панели. Только для Control.Add (ctrl) занимает 1 секунду. (16 мс за звонок).

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

ответ

3

Эти элементы управления добавляются через конструктор, или вы добавляете их вручную в код? Если это последнее, я бы рекомендовал позвонить SuspendLayout на Form перед загрузкой элементов управления, затем ResumeLayout(true) после того, как вы закончите загрузку.

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

EDIT

Зачем вам нужен 70 RichTextBox управления? Рассматривали ли вы редизайн формы, чтобы так много не требовалось (например, повторное использование нескольких для нескольких целей)? Вы исследовали свой собственный элемент управления, чтобы узнать, можно ли получить какую-либо скорость в вашем собственном конструкторе?

+0

Hi Adam, Все создано вручную. Мы уже используем SuspendLayout и SuspendDrawing (WM_SETREDRAW). –

+0

Если это так, то любая оптимизация будет на уровне компонента. Маловероятно, что вы сможете получить дополнительные повышения производительности. –

0

После много трассировки мы обнаружили, что конструктор для пользовательского унаследованного RichTextbox занимает 7-8 мс за звонок. 70 средств управления 70 * 8 = 560 мс.

Невозможно скопировать или клонировать уже построенный CustomRichTextBox? Будет ли это иметь значение?

+0

Единственный способ создать новый объект - это вызвать конструктор (на некотором уровне, независимо от используемого шаблона проектирования, * что-то * вызывает конструктор), поэтому «копирование» объекта невозможно. –

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