Прежде всего, после тестирования вашего кода кажется, что вы переписали WrapPanel
, который уже существует в WPF.Когда я заменил ваш TestPanel
на WrapPanel
, поведение было точно таким же, с улучшением производительности.
Во-вторых, мне интересно, какое оборудование, в частности, видеокарту вы используете.Когда я запустил этот образец на своем компьютере, я увидел, что почти нет лагов.Конечно, это не та «остановка заточки», о которой вы говорите.
Наконец, единственный известный мне способ улучшить производительность рендеринга текста - это использовать низкоуровневые текстовые объекты.FormattedText
приходит на ум.Однако работать с этим гораздо сложнее, чем с TextBlock
, поэтому я рекомендую вам подумать о том, чего вы пытаетесь достичь, прежде чем переходить на FormattedText
.
РЕДАКТИРОВАТЬ :
Реальная область, в которой WPF наносит ущерб вашей производительности, - это проходы Измерения и организации системы layout .Важно понимать, что каждый раз, когда вы изменяете размер окна, WPF пересчитывает размеры и позиции каждого элемента пользовательского интерфейса, а затем перестраивает их соответствующим образом.Это чрезвычайно полезно для достижения гибких макетов или создания динамических пользовательских интерфейсов, но для статической сетки данных (которая, как вам кажется, имеет в виду), это приносит больше вреда, чем пользы.На большинстве машин WPF будет перекладывать как можно больше работы на графический процессор.В вашем случае, однако, процессор обрабатывает все, поэтому "отток", который вы видите при изменении размера.
FormattedText
будет быстрее, но не будет пригоден для работы с сеткой данных.Вместо того, чтобы писать собственную панель макета (сценарий 1% в WPF), я бы переключился на ListView
или сторонний компонент сетки и посмотрел, как производительность в этот момент.Компоненты такого типа создаются (и оптимизируются) для отображения огромных рядов изменяющихся данных - панели макета WPF созданы так, чтобы содержать другие элементы пользовательского интерфейса и чертежи.