2013-08-06 4 views
2

완전히 자신을 테스트 할 시간이 없다면 다른 사람이 컨트롤의 속성과 스타일 (또는 그 반대)을 사용하여 컨트롤의 모양을 정의하는 데있어 성능 및/또는 메모리 이점이 있는지 알 수 있기를 바랍니다.WPF : 속성을 설정하는 것과 스타일을 사용하는 것의 성능 및/또는 메모리 이점이 있습니까?

옵션 # 1 :

<Border Background="White" BorderBrush="Black" BorderThickness="2" CornerRadius="20"> 
    ... 
</Border> 

옵션 # 2 :

<Style x:Key="BorderStyle" TargetType="Border"> 
    <Setter Property="Background" Value="White"/> 
    <Setter Property="BorderBrush" Value="Black"/> 
    <Setter Property="BorderThickness" Value="2"/> 
    <Setter Property="CornerRadius" Value="20"/> 
</Style> 

<Border Style="{StaticResource BorderStyle}"> 
    ... 
</Border> 

내가 그 이점을 이해 내가 재사용에 대한 요구 하진 않았어 있습니다. 나는 구체적으로 주어진 컨트롤에만 적용되고 재사용되지 않는 스타일에 대해서는 궁금하다.

다른 예는 여백이있는 두 번째 테두리가있는 경우입니다. Border가 위와 같은 스타일을 사용하고 Margin 속성을 직접 설정하는 데 더 많은 메모리와 메모리가 필요합니까? 아니면 새 setter에서 첫 번째 스타일 리소스를 기반으로 두 번째 Style 리소스를 만들어야합니까?

+1

우선 순위 설정 값 목록 [(링크)] (http://msdn.microsoft.com/en-us/library/ms743230.aspx)을 보면 '로컬 값'이 첫 번째 값임을 알 수 있습니다 (3 위)는 '스타일 세터'(8 위)보다 높았다. 따라서 값을 로컬로 설정하면 이러한 값이 다른 소스의 값보다 조금 더 빠르게 설정됩니다. –

+1

나는 더 나은 용어가 "빨리"가 아니라 "빨리"설정된다고 말할 것이라고 생각한다. – Shoe

+1

우선 순위 목록은 * when * 속성 값이 실제로 설정되는 것에 대한 어떠한 진술도하지 않습니다. 우선 순위 순서 만 나열하면됩니다. – Clemens

답변

0

나는 우선 순위 목록이 그 안에 있음을 알았지 만, 논평에서 썼던만큼 많지는 않았다. 여기에 메모가 Matthew MacDonald book [Chapter 4. Dependency Property]의 우선 순위 목록에 대해 말씀 : 당신은 로컬 값을 설정할 때

enter image description here

은 그래서, 메모리는 값에 할당됩니다. 이러한 값을 Style에 설정하고 Style을 사용하는 다른 컨트롤을 사용하면 Style 값을 저장하여 메모리를 한 번만 할당합니다.

컨트롤이 많지 않으면 (퍼지의 개념이 1, 2 또는 3 일 수 있음) 속도가 실질적으로 차이가 없지만 컨트롤이 설정된 경우이 경우 차이점 속도와 메모리 저장이 될 것입니다.

0

한 곳에서만 사용하는 속성 모음에 대해 Style 구문을 사용하면 메모리 효율성은 없지만 코드를 쉽게 읽을 수 있습니다. 주요 XAML 코드가 좀 덜 복잡해집니다. 리소스 사전 스타일과 로컬 정의 된 종속성 속성을 사용하는 경우 실행 속도 차이를 느끼지 못했습니다.

두 번째 질문에도 속도 차이는 눈치 채지 못하지만 로컬 속성을 지정하여 리소스 사전 속성을 무시할 수 있습니다. 스타일을 사용하는 것과 관련하여 메모리 효율성이 매우 낮습니다.