Windows 프레젠테이션 Foundation 데이터 바인딩을 사용할 때 메모리 누수가 발생할 수 있습니다.

기술 자료 번역 기술 자료 번역
기술 자료: 938416 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

Microsoft Windows 프레젠테이션 Foundation (WPF에서) 데이터 바인딩을 사용할 때 메모리 누수가 발생할 수 있습니다.

원인

다음 조건에 해당하면 이 문제가 발생합니다.
  • 데이터 바인딩 경로를 X 개체의 P 속성을 참조합니다.
  • X 개체를 직접 참조 또는 데이터 바인딩 작업의 대상 간접 참조가 포함되어 있습니다.
  • 속성 PDependencyProperty 개체 또는 PropertyInfo 개체 대신 PropertyDescriptor 개체를 통해 액세스할 수 있습니다.

해결 과정

이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.

방법 1

속성을 PDependencyProperty 개체를 통해 액세스하십시오.

방법 2

개체의 XINotifyPropertyChanged 인터페이스를 노출하십시오.

방법 3

데이터 바인딩 모드 OneTime 로 설정하십시오.

현재 상태

이것은 의도적으로 설계된 동작입니다.

추가 정보

WPF의 OneTime 속성에 대해 수신 대기해야 표시되지 않는 데이터 바인딩 작업을 원본 개체 (개체 X) 알림을 변경합니다. WPF에서 INotifyPropertyChanged 인터페이스를 DependencyProperties 클래스의 기본 제공 알림 또는 알림을 사용합니다.

DependencyProperties 클래스 및 INotifyPropertyChanged 인터페이스를 사용할 수 없는 경우 WPF ValueChanged 이벤트를 사용합니다. 이 동작은 속성 P 해당하는 PropertyDescriptor 개체의 PropertyDescriptor.AddValueChanged 메서드를 호출하는 것입니다. 아쉽게도 이 작업에서 이 PropertyDescriptor 개체 개체는 X 강력한 참조를 만들 수 있는 CLR (공용 언어 런타임 () 됩니다. 또한 CLR의 글로벌 테이블에 PropertyDescriptor 개체에 대한 참조를 유지합니다. 이 문제는 다음과 같은 순서로 발생하도록 참조 체인을 발생합니다.
  1. 전체 테이블
  2. PropertyDescriptor 개체
  3. Object X
  4. 데이터 바인딩 대상

    참고 X 개체와 데이터 바인딩 대상 사이에 참조 "원인" 절에 나열된 첫 번째 조건이 발생할 수 있습니다.
  5. 바인딩
데이터 바인딩 대상 사용하는 동안에는 바인딩에 대한 변경 내용을 수신 계속 합니다. 이 동작은 alive PropertyDescriptor 개체 사이의 참조를 유지합니다 X, 개체 및 대상 사용 중인 상태로 유지됩니다. 이 문제는 개체 XX 어떤 개체를 참조하는 모든 개체는 메모리 누수가 발생합니다. 이러한 개체를 데이터 바인딩 대상이 포함됩니다.

해결 방법 1 및 해결 방법 2 기본 알림 메커니즘 중 하나를 사용하여 WPF를 발생합니다. 해결 방법 3을 변경 알림을 수신하도록 WPF를 지시합니다. 세 가지 해결 방법을 모두 X 개체 및 PropertyDescriptor 개체 사이의 참조를 만들지 마십시오.

다음 코드 예제에서는 누수 조건이 만들어집니다.
<Label Name="MyLabel">
   <Stack Panel Name="MyStackPanel">
      <TextBlock Text="{Binding ElementName=MyStackPanel, Path=Children.Count}" />
   </StackPanel>
</Label>
이 코드 예제에서는 속성 PCount 속성을 나타냅니다. 또한 개체 XUIElementCollection 클래스 StackPanel.Children 속성 형태로 표현됩니다.

X 개체의 자식 개체가 X 참조하기 때문에 "원인" 절에 있는 첫 번째 조건이 충족된. 이러한 자식 바인딩 대상 포함시키고 바인딩 대상 TextBlock 요소입니다.

속성 PDependencyProperty 개체 아니어서 개체를 XINotifyPropertyChanged 인터페이스를 구현하지 않습니다 "원인" 절에 있는 두 번째 조건이 충족되지. 이 문제는 UIElementCollection 클래스와 해제될 수 TextBlock 요소 발생합니다. UIElementCollection 클래스 StackPanel 컨테이너 클래스에 대한 참조를 포함하고 있으므로 또한 StackPanel 컨테이너 클래스, 해제되지 않습니다. UIElementCollection 클래스와 TextBlock 요소 주 트리에서 code:
MyLabel.Content = <Some New Content>;

속성

기술 자료: 938416 - 마지막 검토: 2007년 7월 26일 목요일 - 수정: 1.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft .NET Framework 3.0
키워드:?
kbmt kbtshoot kbprb KB938416 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com