2017-01-16 1 views
0

을 사용하면 성능에 차이가 있습니까? 컬렉션으로 추가 할 때마다보기를 새로 고치거나 간단한 List 컬렉션을 사용하고 모든 요소가 이미 추가되었을 때 전체보기를 새로 고칩니다.목록 또는 ObservableCollection?

위에서 설명한대로 List으로 시나리오가 가능합니까? 이것을 어떻게 구현할 것인가?

내 ItemsControl이 느리기 때문에 묻습니다. ObservableCollection 대신 간단한 List를 사용하는 것이 더 좋을지 궁금합니다. 사실 모든 요소가 이미 컬렉션에 추가되었을 때 한 번에 한 번씩 뷰를 새로 고쳐야합니다.

답변

1

ObservableCollection<T> 구현을 IList<T>. 주요 차이점은 물론 WPF가 바인딩 할 수 있도록 INotifyCollectionChanced을 구현한다는 것입니다.

UI를 변경할 때마다 ObservableCollection<T>이 이벤트를 새로 고칩니다. 순차적으로 많은 항목을 추가하는 경우 성능에 약간의 영향을 줄 수 있지만 가능성은 없습니다. 당신은 생성자 느릅 나무를 사용하여이 오히려 간단하게 테스트 할 수는 목록됩니다 : 당신은 당신이 객체의 이후 복잡한 목록을 만들 수 있습니다

var originalList = new List<SomeClass>(); 

foreach ([..]) 
{ 
    originalList.Add(someInstance); 
} 

ObservableCollection<SomeClass> uiCollection = new ObservableCollection<SomeClass>(originalList); 

이 방법은 당신이 당신이에 바인딩되는 그것의를 벗어난 ObservableCollection에를 만들 수 있습니다 완료 UI.

1

런타임에 항목을 동적으로 추가하거나 제거하지 않으려면 ObservableCollection<T> 대신 List<T>을 사용할 수도 있습니다. 그러나 성능의 차이는 무시할 수 있습니다.

ObservableCollection<T>에 대한 특별한 점은이 INotifyCollectionChanged 인터페이스를 구현한다는 것입니다 : WPF가 수집 변경을 수신하기 위해이 인터페이스를 구현하는 모든 콜렉션의 CollectionChanged 이벤트를 구독 https://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged(v=vs.110).aspx

. 따라서 어떤 이유로 변경 알림을 지원하는 사용자 지정 컬렉션을 만들려는 경우이 인터페이스를 구현하는 클래스를 만들 수 있습니다.

성능 문제가 사용중인 소스 모음 유형과 관련되어 있음을 강력히 의심합니다. 당신은 UI 가상화가 활성화되어 있는지 확인 및 WPF에서 컨트롤의 성능을 개선하는 방법에 대한 제안 목록 여물 가야한다 : List<T>가하는 것처럼 https://msdn.microsoft.com/en-us/library/cc716879(v=vs.110).aspx