Является ли жестко запрограммированный XAML быстрее, чем XAML, созданный с помощью кода? - PullRequest
0 голосов
/ 13 октября 2010

У меня есть пользовательский контроль WPF, который содержит несколько текстовых полей и кнопок. В настоящее время все эти текстовые поля и кнопки создаются и динамически загружаются в ItemsControl с помощью кода позади, когда создается экземпляр элемента управления. Единственным жестко закодированным XAML является объявление ItemsControl.

Иногда это может быть немного вялым. Было бы быстрее, если бы я избавился от ItemsControl и жестко закодировал текстовые поля и кнопки в XAML usercontrol?

Ответы [ 3 ]

6 голосов
/ 13 октября 2010

Обычно лучше следовать рекомендациям для платформы, на которой вы работаете; генерирование элементов «вручную» в коде позади, безусловно, не является одним из них в WPF. Изучите использование DataTemplates и оставьте тяжелую работу для фреймворка. Это не является жестким кодом - вы по-прежнему будете предоставлять элементы (в коде, если необходимо, но желательно через привязки), а ItemsControl «оденет» элементы, предоставленные в его ItemsSource, с соответствующими DataTemplates. Обычно это работает быстрее, даже если только потому, что виртуализация обрабатывается автоматически (в зависимости от фактического элемента управления, который вы используете, но большинство ItemsControls делают).

1 голос
/ 13 октября 2010

Два варианта: использовать код для генерации графа объекта или использовать XAML.

Сгенерированный код:

1) Компилятор преобразует ваш код в IL
2) Ваш IL интерпретируется во время выполнения CLR
3) Ваш граф объектов создан, когда ваш код выполняет

Сгенерированный XAML (по сути, смесь кода и XAML, составляющих ваш UserControl):

1) Компилятор преобразует часть кода в IL, а XAML - в BAML
2) Ваш IL интерпретируется во время выполнения
3) Ваш класс создан из файла BAML во время выполнения
4) Единороги и магия объединяют два

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

Я думаю, что ваша медлительность может быть вызвана чем-то другим. Возможно, вы действительно видите задержку JIT при первом выполнении, или другие факторы в вашем коде могут быть причиной того, что процесс займет больше времени.

Независимо от того, я бы предложил вам создать свой WPF образ WPF. Используйте привязку, и если вам нужно динамически создать свой пользовательский интерфейс, загляните в ItemsControls и DataTemplates. Это намного проще, чем вы думаете.

0 голосов
/ 13 октября 2010

Ну, конечно, нет большой разницы в скорости, но для разработки, отладки и т. Д. Код немного лучше.

Попробуйте Xaml Generator , и убедитесь сами.

...