WPF ComboBox 에 Item 을 선택할 때
SelectedIndex
SelectedValue
SelectedItem
이렇게 세가지 방법이 있다.
이번 주제는 SelelctedValue 와 SelectedItem 의 차이에 대해서 이야기 해보겠다.
SelelctedValue 는 ComboBox 에 ItemsSource 를 Binding 시 그 바인딩 한 객체의 특정한 프로퍼티를 지정하여
검색하여 할 때 그 지정한 프로퍼티의 값을 찾아서 해당 아이템을 선택한다.
<ComboBox ItemsSource="{Binding Items}"
DisplayMemberPath="Label"
SelectedValuePath="Key" />
SelectedItem 은 Binding Item 의 객체를 넣어주면 그 객체로 그냥 선택이 된다.
문제는 2개의 성능에서 차이가 있다는 것이다.
일반적으로 아이템의 개수가 작거나 컴퓨터의 성능이 어느 정도 이상이면 이런 문제는 발생하지 않지만
반대의 경우에는 꽤 심각한 문제를 발생시킬 수 있다.
우선 결론만 이야기 하지만 SelectedItem 이 빠르다.
대부분의 예상과 약간의 테스트 결과 SelectItem 은 콜렉션에서 동일한 객체를 그냥 찾아오는 듯하고
SelectedValue 는 전 항목을 루프를 돌면서 비교를 하는 게 아닌가 싶다.
테스트를 위해서 간단한 프로그램을 짜봤다.
Items = new ObservableCollection<Item>();
for (int i = 0; i < 10000; i++)
Items.Add(new Item { Key = i, Label = "Label " + i.ToString() });
ComboBox 에 1000만개의 항목을 넣고 선택을 할 때 걸리는 시간을 재어보았다.
우선 SelectedItem 을 이용해서 선택한 경우
cboNumber.SelectedItem = Items[4510];
거의 시간이 걸리지 않는 다는 것을 알 수 있다.
그리고 테스트처럼 10000개의 항목을 넣는 경우도 없을 것이다.
하지만, 배포하는 클라이언트 중에는 굉장히 성능이 안 좋은 것도 있을 수 있다.
우리가 개발할 때의 사소한 차이가 유저의 클라이언트에서는 큰 차이를 만들 수 있다.
(그래서 현재 골머리를 썩고 있다.....ㅡ,.ㅡ);
'Dev::DotNet > WPF' 카테고리의 다른 글
WPF 에서 Resize 시 멈춤 현상 (0) | 2013.12.05 |
---|---|
NetAdvantage XamDockManager 의 Menu 비활성화 (0) | 2013.12.02 |
XmlnsDefinition 을 통한 namespace 매칭 (0) | 2013.11.22 |
WPF 에서 DoEvents (0) | 2013.11.18 |
WPF Visual Tree or Logical Tree 순회 (0) | 2013.11.13 |