문제

나는 현재 내 코드에서 사용할 수 있는 데이터베이스에서 결과를 얻기 위해 DataTable을 사용하고 있습니다.

그러나 웹의 많은 예제에서는 대신 DataSet을 사용하고 컬렉션 메서드를 통해 테이블에 액세스하는 방법을 보여줍니다.

DataSet 또는 DataTable을 SQL 결과의 저장 방법으로 사용하면 성능 측면에서 어떤 이점이 있습니까?

도움이 되었습니까?

해결책

실제로 가져오는 데이터의 종류에 따라 다릅니다.DataSet은 (사실상) DataTable 개체의 컬렉션이므로 여러 개별 데이터 집합을 단일 개체로 반환할 수 있으므로 관리하기가 더 쉽습니다.

성능 측면에서 보면 .NET 구성의 "잘못된" 선택보다 최적화되지 않은 쿼리로 인해 비효율성이 발생할 가능성이 더 높습니다.적어도 그것은 내 경험이었습니다.

다른 팁

한 가지 주요 차이점은 DataSet이 여러 테이블을 보유할 수 있으며 해당 테이블 간의 관계를 정의할 수 있다는 것입니다.

단일 결과 세트만 반환하는 경우 DataTable이 더 최적화될 것이라고 생각합니다.DataSet이 수행하는 기능을 제공하고 여러 DataTable을 추적하려면 약간의 오버헤드(작게 부여됨)가 있어야 한다고 생각합니다.

1.x에는 DataTable이 할 수 없는 일과 DataSet이 할 수 있는 일이 있었습니다(정확히 무엇인지는 기억나지 않습니다).2.x에서 변경된 모든 것.내 생각엔 이것이 바로 많은 예제가 여전히 DataSet을 사용하는 이유인 것 같습니다.DataTable은 더 가벼우므로 더 빨라야 합니다.단일 결과 집합만 가져오는 경우 둘 중에서 가장 좋은 선택이 됩니다.

DataSet의 한 가지 기능은 저장 프로시저에서 여러 select 문을 호출할 수 있는 경우 DataSet이 각각에 대해 하나의 DataTable을 갖게 된다는 것입니다.

BeginLoadData() 호출, 데이터 삽입, EndLoadData() 호출 등 DataTable을 채울 때 사용할 수 있는 몇 가지 최적화 방법이 있습니다.이렇게 하면 인덱스 유지 관리 등과 같은 DataTable 내의 일부 내부 동작이 꺼집니다.보다 이 기사 자세한 내용은

어쨌든 단일 테이블만 다룰 때 제가 발견한 가장 큰 실제 차이점은 DataSet에는 "HasChanges" 메서드가 있지만 DataTable에는 없다는 것입니다.그러나 둘 다 "GetChanges"가 있으므로 이를 사용하여 null을 테스트할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top