Допустим, у меня есть 10000 элементов управления WPF, которые довольно сильно стилизованы, и что их стили примерно на 90% идентичны.
Я задаюсь вопросом: что было бы лучшим способом сделать это с точки зрения производительности?
- имеют 10000 уникальных стилей
- имеют 1 стиль, содержащий общие 90% + 10000 стилей, унаследовавших этот стиль и добавляющих оставшиеся 10%
Iя выбрал второй вариант, не задумываясь (по соображениям читабельности), но я провел несколько базовых тестов, которые показали, что это очень плохая идея с точки зрения производительности.Так что мои тесты глючат, или наследование стилей действительно снижает производительность?
edit: хорошо, я был почти уверен, что это недостаточно хорошо объяснено.Я попытаюсь немного рассказать подробнее:
В основном, моя забота связана с DataGrid.Мои ячейки в значительной степени настраиваемы (в основном, вы можете изменить каждое свойство стиля в ячейке), и поскольку сетка данных не позволяет сделать это легко (благодаря тому, что datacridcell представляет собой rowView вместо CellView), я сделал кое-чтодействительно некрасиво добиться того, что я добавляю (см. там , если хотите подробности).В основном он состоит в установке CellStyle в коде для каждой ячейки.
, поскольку у этих стилей много общего, я попытался установить общий стиль, вставить статические ресурсы моего приложения и основать все стили моей ячейки.на этом общем стиле.(среди прочего, в этом стиле размещались прослушиватели событий, в то время как cellStyles добавляли привязки к таким свойствам, как цвет переднего плана, FontSize и т. д.)
Я заметил большое падение в таблице данных, когда пыталсятот.Теперь, когда я не тестировал эту сторону приложения в то время, возможно, просто какая-то часть кода была просто плохо написана, и падение производительности не имело никакого отношения ко мне, используя стили "basedon".Как бы то ни было, я откатился назад и закончил тестирование, которое у меня было.
Теперь я прибираю код и снова думаю об этом.Прежде чем приступить к попыткам изменить всю мою стилевую структуру, если только для целей тестирования, я подумала, что сначала спрошу, стоит ли эта проблема ... больше ничего не происходит ...
спасибо за помощь!