Влияние на производительность применения LayoutTransform против RenderTransform?
Я имел дело как с LayoutTransform, так и с RenderTransform, и я знаю, что каждый из них подходит для определенного сценария, который я нашел в предыдущих проектах.
Тем не менее, с точки зрения производительности и при использовании инструмента профилирования WPF, например, какой из них оказывает меньшее влияние на производительность пользовательского интерфейса?
2 ответа
Как указано в MSDN:
Чтобы применить преобразования к FrameworkElement, создайте Transform и примените его к одному из двух свойств, которые предоставляет класс FrameworkElement: LayoutTransform - преобразование, которое применяется перед передачей макета. После применения преобразования система макетов обрабатывает преобразованный размер и положение элемента. RenderTransform - преобразование, которое изменяет внешний вид элемента, но применяется после завершения этапа макета. Используя свойство RenderTransform вместо свойства LayoutTransform, вы можете получить выигрыш в производительности. Какое свойство вы должны использовать? В связи с преимуществами производительности, которые он обеспечивает, используйте свойство RenderTransform всегда, когда это возможно, особенно когда вы используете анимированные объекты Transform. Используйте свойство LayoutTransform при масштабировании, повороте или наклоне, и вам нужно, чтобы родительский элемент элемента соответствовал преобразованному размеру элемента. Обратите внимание, что при использовании со свойством LayoutTransform объекты TranslateTransform, по-видимому, не влияют на элементы. Это связано с тем, что система компоновки возвращает переведенный элемент в исходное положение в процессе его обработки.
А также:
LayoutTransform может привести к снижению производительности приложения, если вы вызовете его в сценарии, который не требует полного прохождения системой макетов. Когда вы применяете LayoutTransform к коллекции Children на Panel, он запускает новый проход с помощью системы макетов и заставляет все объекты на экране повторно измерять и переупорядочивать. Если вы обновляете полный пользовательский интерфейс приложения, эта функциональность может быть именно тем, что вам нужно. Однако, если вам не нужен полный проход макета, используйте свойство RenderTransform, которое не вызывает систему макетов и, следовательно, обычно является лучшим выбором для этого сценария.
Чтобы добавить к ответу gliderkite, RenderTransforms также будет обрабатываться графическим процессором, когда это возможно, тогда как LayoutTransforms выполняется на CPU.