2009-05-10 4 views
3

WPF 프로젝트에서 막대한 메모리 누수가 발생했으며이를 최소화하기 위해 할 수있는 일을 파악하려고합니다. 리소스에 액세스하려면 StaticResource를 100 % 사용하십시오. 할 수있는 곳에서 DynamicResource를 사용해야합니까? StaticResource와 DynamicResource간에 메모리 관리에 대한 장점이 있습니까?WPF - 동적 대 정적 리소스

FYI : DataTemplate을 통해 데이터를 표시하는 목록 상자가 있습니다. 사용자가 위/아래로 스크롤 할 때 메모리가 빠르게 증가하여 몇 분 동안 위/아래로 스크롤하면 1GB에 도달합니다.

답변

3

StaticResource/DynamicResource 일 가능성은 낮습니다. 정적 및 동적 전략이 아닌 유지 전략 조회를 참조하십시오 ". 그럼 그냥 에게 같은 값을 계속 사용, 한 번 자원을 찾아"

  • 정적 리소스 의미를

  • DynamicResource는 " 리소스가 필요할 때마다 조회합니다. 값이 인 경우 값이 변경되었습니다."라는 의미입니다.

당신은 무엇 때문에 일을하는 것은 올바른 소리 : 같은 DataTemplates (및 사용자가 시스템의 색상을 변경하는 경우 변경 될 수 있습니다 시스템 브러쉬로 변경 될 수 있습니다 자원에 대한 예비 DynamicResource)로 변하지 않는 자원에 대한 정적 리소스를 사용합니다. StaticResource 참조를 통해 DataTemplate을 할당 할 때 DynamicResource 참조를 통해 할당하는 것보다 더 많은 메모리가 들지 않으며 WPF가 계속 돌아가서 참조를 다시 평가할 필요가 없기 때문에 장기적으로 저렴합니다.

서식 파일이 적용될 때 (데이터 항목에 인스턴스화 될 때) 메모리가 할당되거나 간접적으로 메모리가 할당되는 경우가 있습니다. 하나의 반 직관적 인 이유는 템플릿이 예전 스타일의 비트 맵 효과를 사용하는 경우입니다. 또 다른 하나는 템플리트가 이벤트 핸들러를 연결하는 코드 숨김을 호출하는 경우입니다. 하지만 이들 중 어느 것도 템플릿 리소스를 참조하는 방식에 영향을받지 않습니다.

0

내가 아는 한 클라이언트의 운영 체제는 매우 중요합니다.

WPF는 Vista 이상 시스템 (Windows 7)에서 작동하도록 설계되었습니다. xp 사용자에게 성능 문제가있을 수 있습니다.

+0

WPF는 Vista가 아닌 Longhorn 용으로 설계되었습니다. WPF는 또한 Windows Vista보다 1 년 앞서 나온 Visual Studio 2005에서 공식적으로 나온 Windows Vista보다 앞선 것입니다. WPF는 DirectX 9를 기반으로합니다 (여전히 Windows 10에서도 DirectX 10 및 11 인터페이스와 연결하려면 점프해야하며 근본적으로 다른 설계로 인해 DX12는 제대로 작동합니다). – Dai