두 가지 방법에는 큰 차이가 있습니다. 데이터가 필요할 때마다 데이터베이스에 쿼리하면 최신 데이터를 얻게되는 반면, 모든 데이터를 읽고 다시 사용하면 모든 것을 다시 읽을 때까지 최신 변경 내용을 볼 수 없습니다. 두 시스템 모두 장점과 단점이 있지만이 차이점을 알아야합니다.
성능 차이 - 로컬 데이터의 LINQ to Objects가 항상 데이터베이스 쿼리보다 빠르다고 가정하지 마십시오. 데이터베이스는 다양한 쿼리 유형에 대해 매우 잘 최적화되어 있으며 인덱스를 활용할 수 있습니다. LINQ to Object 쿼리는 일반적으로 전체 데이터 집합을 반복합니다. 따라서 데이터를 로컬로 가져가도 데이터를 직접 인덱싱하지 않으면 일부 쿼리가 작업을 수행하는 데 필요한 데이터베이스보다 실제로 느려질 수 있습니다.
인덱스를 사용할 수없는 쿼리의 경우에도 데이터베이스는 여전히 순진한 LINQ to Objects 접근 방식을 이길 수 있습니다. 데이터베이스에는 LINQ to Objects에서 구현되지 않은 몇 가지 고급 알고리즘이 있습니다. 예를 들어 일반적인 쿼리는 필터를 사용하여 일부 기준으로 정렬 된 상위 100 개 항목을 가져 오는 것입니다. OrderBy(x => x.Foo).Take(100)
은 먼저 O (n log n) 정렬을 수행 한 다음 처음 100 개의 요소를 취하고 나머지는 버리기 때문에 충분한 크기의 결과 집합에 사용할 수있는 인덱스가 없어도 데이터베이스가 LINQ보다 개체 성능이 뛰어날 수 있습니다. SQL Server 팀은 이러한 유형의 쿼리가 일반적이므로 O (n) 시간에이 작업을 수행 할 수있는 특별한 최적화 호출 TOP N SORT을 추가했습니다. 오라클과 유사한 최적화가 있다고 생각합니다. 필자는 LINQ to SQL 대 LINQ to Objects 쿼리의 성능 측정을 포함하여이 시점에 대해 더 자세히 설명하는 another answer을 작성했습니다.
충분히 좋지만 데이터베이스가 이렇게 최적화되어 있다고 가정하는 것이 좋습니다. – Riddari