2009-05-22 5 views
19

다른 프로그래머와 의견을 교환하고 있습니다. 데이터베이스 반환 형식에 대한 DataTable과 IEnumerable <T>

는, 누군가가 데이터 집합 및 DataTables 및 IEnumerable<T>을 구현 호의 유형 ... 또는 그 반대의 경우도 마찬가지

I을 사용하지 않도록해야한다가 의미있는 메모리 사용량이나 성능의 차이, 또는 다른 단점입니다 더 가볍고, 속성에 접근 할 때 객체에 강력하게 타입을 지정하고, 기본 유형 등에 대한보다 풍부한 정보를 제공하기 때문에 IEnumerable<T> (List<T>, T[] etc)을 구현하는 반환 유형을 선호합니다. 데이터 리더를 수동으로 사용할 때 설정하는 데 더 많은 시간이 필요합니다.

DataTables를 사용하는 유일한 이유는 요즘의 게으름입니까?

+0

플랫폼/언어? 나는 DataTable이 플랫폼 특정 구조라고 생각한다. 하지만 명시 적으로 대답하는 것이 더 쉽습니다. – Javier

+0

플랫폼은 .Net Framework (C# 또는 vb) 2.0 이상 – CRice

+0

2009 년부터 DataTable을 사용했다고 생각하지 않습니다. 그들은 빨아들입니다. – CRice

답변

18

DataTables은 메모리 요구 사항 및 작성/작성에 소요되는 프로세서 시간 모두에서 List보다 훨씬 무겁습니다.
DataReader를 사용하는 것은 DataTables를 사용하는 것보다 훨씬 빠릅니다 (데이터 어댑터를 채우기 위해 사용하고 있다고 가정합니다). 말했다

... 이는 정말 문제는, 당신은 아마 어느 쪽이든 괜찮아요 어떤 장소에 있으며, 두 가지 방법은, 그래서 그냥 각각의 경우에 더 편안 무엇이든 함께 할 것, 충분히 빨리 될 것입니다하지 않는 한 . (때로는 작은 코드로 채우기를 원할 때가 있습니다. 작은 코드로 읽기를 원할 때도 있습니다.)

저는 자신이 GridView에 바인딩 할 때나 둘 이상의 결과 세트가 필요할 때만 DataTables를 사용하는 경향이 있습니다. 동시에 활성화됩니다.

6

DataTables을 사용하면 기본 데이터 소스와 레이아웃 방법을 직접적으로 의미합니다. 이는 유지 보수성 측면에서 좋지 않습니다. 모든 뷰 요구가 일부 오브젝트의 목록 일 경우, 그 모든 것이 사용자에게 제공되어야합니다.

9

System.Collections 클래스를 사용하는 또 다른 장점은 더 나은 정렬 및 검색 옵션을 얻는 것입니다. DataTable의 정렬 또는 검색 방법을 변경하는 합리적인 방법을 알지 못합니다. 컬렉션 클래스를 사용하면 클래스가 IComparable 또는 IEquatable을 구현하고 List.Sort 및 List.Contains의 작동 방식을 완전히 사용자 정의 할 수 있습니다.

또한 DBNull에 대해 걱정할 필요가 없습니다. 널 null을 예상하고 DBNull을 얻었 기 때문에 둘 이상의 경우에 나를 트 랩핑했습니다.

+3

정렬 및 검색을 위해 DataView를 사용하십시오. –

8

또한 IEnumerable<T>을 사용하면 메서드 및 속성을 사용하여 컬렉션의 기본 형식을 향상시켜 구현을 훨씬 더 우아하게하고 코드를 유지 관리 할 수 ​​있습니다. 예를 들어 FullName 속성입니다. 확장 메서드가 사용자 컨트롤에서 벗어난 경우 클래스에 확장 메서드를 추가 할 수도 있습니다.

public class SomeUser 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string FullName { get { return String.Format("{0} {1}", FirstName, LastName); } } 
} 
0

SQL을 통해 큰 테이블을 찾았을 때 데이터 테이블이 IEnumerable 대신 훨씬 빠릅니다. 나는 하나의 HTML 페이지에 26 개의 열과 25 개의 열이있는 테이블을 버렸다. Datatable 3 초, IEnumerable 9 초 걸렸습니다. 나는 DataTable에 투표합니다. 유형을 제외한 모든 코드 워드는 동일합니다.

관련 문제