기본 콘텐츠로 건너뛰기

[ADO.NET] Row Filtering... DataTable.Select() vs DataView.RowFilter

ADO.NET 의 DataTable을 사용하는 경우에 DataTable내에서 데이터를 필터링하여 재 사용하여야 하는 경우가 많이 발생하게 된다.

이 때 고민에 빠지는 것이 DataTable의 데이터가 많은 경우에 다양한 조건으로 데이터를 필터링하여야 하는데 성능이 어떤 것이 좋은지? 에 대한 것이다.

여러가지 정보를 검색하던 중에 [ 여기 ]에서 구체적으로 성능 시험을 한 부분이 있어서 정리해 본다.

위의 참고 자료를 기준으로 하면 근소하나마 DataView.RowFilter를 이용하는 것이 성능 상으로 좋다는 결론을 볼 수 있다.

그러나 또 궁금한 것은 DataTable에 대해서 Index의 설정과 이를 이용하는 경우와 이용하지 않는 경우의 필터링 조건에 따라 위의 결과가 다를 수도 있지 않을까? 하는 의문이다.

이 부분에 대해서는 MSDN에서 보조적인 설명을 해 주고 있다.

"The Find and FindRows methods leverage the current index without requiring the index to be rebuilt."

위의 문장을 의역해 보면 "현재의 인덱스를 이용하면 인덱스를 재 구성하지 않고 사용하기 때문에 Find 나 FindRows 메서드가 최대의 성능을 낼 수 있다" 라고 할 수 있다.

즉, Index 를 구성하지 않는 컬럼을 기준으로 필터링을 한다면 DataView.RowFilter 를 사용하는 것이 좋다는 뜻이 된다. 이유는 DataView.RowFilter는 필터링을 하면서 해당 컬럼에 대한 인덱스를 구성하기 때문이다.

따라서 단순히 한번의 필터링을 한다면 그다지 큰 차이는 없겠지만, 필터링의 기준 컬럼의 값을 여러 번에 걸쳐서 필터링을 한다면 인덱스를 구성하고 이를 사용하게 되는 DataView.RowFilter가 더 좋은 성능을 발휘하다는 것이다.

물론 이런 생각과 정리는 많은 데이터를 사용하는 경우에 성능적인 향상을 볼 수 있다는 의미다. 고작 몇 건의 데이터에 대해서 이런 것을 고민할 필요는 없을 것이다.

댓글