2017-12-17 4 views
-1

내 WPF 응용 프로그램에서 XAML이 너무 많아서 WPF에서 ResourceDictionary를 사용하는 데 다소 혼란 스럽습니다. 응용 프로그램을 금식하거나 느리게 사용합니까?ResourceDictionary를 사용하여 WPF 성능

EX : 우리는 우리가 내 응용 프로그램에있는 TextBlock의 많은에 적용하고자하는 TextBlock에 대한 다음과 같은 스타일이 있다고 가정하자 : 내 응용 프로그램 성능을위한 가장 좋은 방법은 무엇

<Style TargetType="{x:Type TextBlock}" x:Key="MainText"> 
      <Setter Property="FontSize" Value="12" /> 
      <Setter Property="Height" Value="20" /> 
      <Setter Property="FontWeight" Value="Bold" /> 
      <Setter Property="FontFamily" Value="Droid Arabic Kufi" /> 
      <Setter Property="Foreground" Value="#FF383838"/> 
      <Setter Property="HorizontalAlignment" Value="Center"/> 
</Style> 

을, 같은 위 ResourceDictionary의의 스타일 선언하고 다음으로 사용 :

<TextBlock Style="{StaticResource MainText}" Text="Hello"/> 

또는 스타일 반복 (글꼴 너비, FontFamily를, 전경을 ...) 각각에?

미리 감사드립니다.

+0

성능 차이가 눈에 띄지 않아야합니다. 편의성 (모든 컨트롤의 모든 속성을 수동으로 다시 적용하지 않아도 됨) –

+0

하지만 정말로 알고 싶으면 모든 속성을 수동으로 설정하는 것이 시작할 때 약간 더 빠를 가능성이 높습니다 (하나의 간접 레벨을 제거하기 때문에). 컨트롤이로드되면 더 이상 차이가 없어야합니다 (모든 속성 값이 확인 되었기 때문에) –

+2

성능에 눈에 띄는 차이는 없습니다 (전혀없는 경우). 그러나 한 번 스타일에서 속성을 설정하고 많은 컨트롤에 대해 해당 스타일을 사용하면 응용 프로그램 디자인이 훨씬 향상됩니다. – Clemens

답변

1

그런 식으로 사용하면 성능 차이가 없습니다. ResourceDictionaries의 성능 변형은보기가 초기화 될 때만 사용됩니다. 그 이유는 그것이 그 키의 첫 번째 것을 발견 할 때까지 자원을 먼저 안쪽으로 그리고 바깥쪽으로 들여다 보는 것입니다. 따라서 리소스가 컨트롤에 있으면 더 빨리 발견 된 다음 해당 컨트롤의 부모를 검색하고 Window (대개 MainWindow), 마지막으로 Application을 검색합니다. (컨트롤에 가까울수록 리소스가 더 빨리 발견되고 사용된다는 것을 의미하지만 그 속도는 문제가 아닙니다. 앱 레벨에서 많은 ResourceDictionary를 공유하는 앱에서는 문제가됩니다.)

이 제약 조건을 극복하는 데는 매우 효율적이고 영리한 방법이 있지만보기에만 천천히 렌더링하지 않으면 문제가되지 않습니다. 뷰가 렌더링되면 소스에 대한 직접 참조가 있고 더 이상 검사가 없습니다. 이제 컨트롤이 만들어진 경우, ItemsControl의 템플릿과 같이 뷰가 이미 렌더링되어 있고 템플릿이 해당 리소스를 참조하면 업데이트 및 기타 상황에서 패널티가 표시 될 수 있습니다.

(으)로 ... ResourceDictionary가 App 레벨에 있고 당신이 많이 가지고 있지 않으면 성능에 대해 걱정하지 마십시오.