■ 기본적으로 WPF는 DrawingBrush 및 VisualBrush와 같은 TileBrush 개체의 렌더링된 콘텐츠를 캐시하지 않는다. 장면에서 TileBrush의 내용이나 사용이 변경되지 않는 정적 시나리오에서는 비디오 메모리를 절약하므로 의미가 있다. 정적 컨텐츠가 있는 TileBrush가 비정적 방식으로 사용되는 경우(예 : 정적 DrawingBrush 또는 VisualBrush가 회전하는 3D 개체의 표면에 매핑되는 경우)는 의미가 없다. WPF의 기본 동작은 콘텐츠가 변경되지 않더라도 모든 프레임에 대해 DrawingBrush 또는 VisualBrush의 전체 컨텐츠를 다시 렌더링하는 것이다.
RenderOptions 개체의 CachingHint 속성을 Cache로 설정하면 캐시된 버전의 바둑판식 브러시 개체를 사용하여 성능을 향상시킬 수 있다.
CacheInvalidationThresholdMinimum 및 CacheInvalidationThresholdMaximum 속성 값은 배율 변경으로 인해 TileBrush 개체를 다시 생성해야 하는 시기를 결정하는 상대 크기 값이다. 예를 들어 CacheInvalidationThresholdMaximum 속성을 2.0으로 설정하면 TileBrush의 캐시 크기가 현재 캐시 크기의 두 배를 초과하는 경우에만 다시 생성하면 된다.
▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using System.Windows.Media; DrawingBrush drawingBrush = new DrawingBrush(); // 브러시에 대한 캐싱 힌트 옵션을 설정한다. RenderOptions.SetCachingHint(drawingBrush, CachingHint.Cache); // 타일 브러시 재생성을 위한 최소 및 최대 상대 크기를 설정한다. // 타일 브러시는 크기가 현재 캐시된 크기의 0.5x 또는 2x일 때 재생성되고 다시 캐시된다. RenderOptions.SetCacheInvalidationThresholdMinimum(drawingBrush, 0.5); RenderOptions.SetCacheInvalidationThresholdMaximum(drawingBrush, 2.0); |