2014-01-25 3 views
2

DataGrid에 수천 개의 레코드를 표시하는 WPF 응용 프로그램을 만들고 있습니다. 외부 소스에서 오는 데이터를 ObservableCollection에서 비동기 적으로로드하고 DataGrid에 바인딩합니다. 하루 종일 그리드에 몇 가지 추가 및 업데이트가있을 것입니다.적합한 ObservableCollection

성능이 현명한 경우 ObservableCollection은 이러한 종류의 응용 프로그램에 적합합니까? 아니면 ObservableDictionary 또는 다른 적절한 컬렉션을 찾아야합니까?

답변

0

최대 10,000 개의 레코드를 아무 문제없이 실시간으로 표시하는 데 사용했습니다. 일단 많은 레코드를 조작하게되면 병목 현상은 사용하는 컬렉션 클래스보다는 알고리즘 선택 및 데이터 가상화 (또는 그 부족) 문제가되는 경향이 있습니다. 즉, 걱정이된다면 대신 there's an article here with a WPF-decoupled ObservableCollection을 사용해보십시오.

+0

.NET 2.0 이후 ObservableCollection 이 WindowBase에서 제거되고 WPF와 완전히 분리되어 있기 때문에이 기사는 완전히 구식입니다. – Alejandro

0

DataGrid는 뷰 포트 영역에서 보이는 내용 만 그리기 위해 UI 가상화를 사용합니다. 이렇게하면 생성 된 UI 요소 수가 줄어들어 메모리와 성능이 향상됩니다. 그러나 수천 개의 항목이 포함 된 ObservableCollections를 처리 할 때는 데이터 가상화 기술도 함께 사용해야합니다.

나는 KIS (Keep It Simple)로 가서 가장 간단한 접근을 시도하는 것이 좋습니다. .NET ObservableCollection을 사용하면됩니다.

업데이트 중에 느린 UI를 경험하는 경우 업데이트 단계에서 UI 업데이트를 차단할 수있는 ObservableCollection (일종의 항목을 짧은 시간에 업데이트해야하는 경우)을 시도하는 것이 좋습니다.

스크롤 또는 선택 중 UI가 오래 걸리거나 메모리가 너무 많으면 데이터 가상화도 고려해야합니다.

행운

0

ObservableCollection가 추가되는 모든 항목에 대한보기를 통지, 그리고 AddRange() 메서드를 지원하지 않습니다. 나는 ObservableCollection을 지원하는 ObservableCollection 클래스를 추천하고 확장합니다. Answer

이 클래스는 전체 대량으로 업데이트됩니다. 각 품목 대신에. 성능 나머지 부분은 DataGrid이 기본적으로 Virtual StackPanel을 지원합니다.