본문 바로가기

Dev::DotNet/WPF

ComboBox 의 SelectedValue 와 SelectedItem 의 성능적 차이

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];



거의 시간이 걸리지 않는 다는 것을 알 수 있다.


그리고 SelectedValue 를 이용해서 선택한 경우

cboNumber.SelectedValue = 4510;


거의 0.1초 정도의 시간이 소모되는 것을 알 수 있다.


0.1초가 아무것도 아닐 수 있다. (참고로 테스트한 노트북의 성능은 꽤 좋은 축에 속한다.)

그리고 테스트처럼 10000개의 항목을 넣는 경우도 없을 것이다.


하지만, 배포하는 클라이언트 중에는 굉장히 성능이 안 좋은 것도 있을 수 있다.

우리가 개발할 때의 사소한 차이가 유저의 클라이언트에서는 큰 차이를 만들 수 있다.

(그래서 현재 골머리를 썩고 있다.....ㅡ,.ㅡ);