Производительность наследования стилей в wpf - PullRequest
0 голосов
/ 11 августа 2011

Допустим, у меня есть 10000 элементов управления WPF, которые довольно сильно стилизованы, и что их стили примерно на 90% идентичны.

Я задаюсь вопросом: что было бы лучшим способом сделать это с точки зрения производительности?

  1. имеют 10000 уникальных стилей
  2. имеют 1 стиль, содержащий общие 90% + 10000 стилей, унаследовавших этот стиль и добавляющих оставшиеся 10%

Iя выбрал второй вариант, не задумываясь (по соображениям читабельности), но я провел несколько базовых тестов, которые показали, что это очень плохая идея с точки зрения производительности.Так что мои тесты глючат, или наследование стилей действительно снижает производительность?

edit: хорошо, я был почти уверен, что это недостаточно хорошо объяснено.Я попытаюсь немного рассказать подробнее:

В основном, моя забота связана с DataGrid.Мои ячейки в значительной степени настраиваемы (в основном, вы можете изменить каждое свойство стиля в ячейке), и поскольку сетка данных не позволяет сделать это легко (благодаря тому, что datacridcell представляет собой rowView вместо CellView), я сделал кое-чтодействительно некрасиво добиться того, что я добавляю (см. там , если хотите подробности).В основном он состоит в установке CellStyle в коде для каждой ячейки.

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

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

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

спасибо за помощь!

1 Ответ

2 голосов
/ 11 августа 2011

Я бы сказал определенно последнее.Сведение общности к «наследуемым» стилям, вероятно, будет лучшим.По крайней мере, загрузка этих стилей во время выполнения будет быстрее в отношении времени на диске.Даже если бы у каждого подстиля было множество сеттеров, их было бы намного меньше, чем 10 000 полностью определенных стилей, составляющих один и тот же элемент управления.Хотя с другими 10% различий, есть ли способ объединить эти различия в наборы стилей?

У вас может быть стиль, основанный на стиле, основанном на стиле ...

Кроме того, есть ли какие-то вещи, которые вы можете отодвинуть в триггеры на этих предметах?Допустим, у вас есть 10000 возможных комбинаций всех ваших настроек стиля.Если бы вы могли отодвинуть несколько из них к нескольким триггерам, похоже, это уменьшило бы количество стилей, которые вам понадобятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...