2008-09-18 4 views
4

myEnumerable.AsQueriable()을 호출 할 때 얻을 수있는 기본 O (n) 선형 검색 성능보다 우수한 linq-to-objects에 대한 IQueriable implementaions가 있습니까?O (n) 성능보다 나은 개체의 경우 Iwweriable <T>?

더 나은 성능을 가진 http://www.codeplex.com/i4o/을 보았지만 IndexedColleciton이 IQueriable을 구현하는 대신 IndexedCollection에서 확장 메서드를 사용하는 것으로 나타납니다.

내가 캐시 또는 db 중 어디를 타는지 알 수 없기 때문에 인터페이스가 Ibleeriable 인 상태로 유지하려고합니다. <T>.

답변

0

본질적으로 어떤 쿼리 (예를 목록 또는 IEnumerable)는 조건을 확인하기 위해 목록의 모든 항목을 반복해야하기 때문에 최상의 O (n)이 될 것입니다. O (n)보다 나은 성능을 얻으려면 어떤 형태로든 데이터를 인덱싱해야합니다.

언급 한 바와 같이 특히 IQueryable 만 노출하려는 경우 라이브러리를 살펴보고 이러한 인덱스를 작성하는 것이 좋습니다.

더 나은 성능으로 데이터를 찾는 더 많은 방법을 알고 싶다면 키를 사용하여 효율적인 조회를 수행하거나 사전에 범위 쿼리를 수행해야하는 경우 b- 트리를 사용하는 것이 좋습니다. Here's a nice MSDN 그 뒤에있는 이론에 관심이 있다면 b-trees를 포함한 데이터 구조에 게시하십시오. 또한 NGenerics은 (는) 흥미로운 프로젝트 일 수 있습니다.

1

당신은 PLINQ를 보라 할 수 있습니다 http://msdn.microsoft.com/en-us/magazine/cc163329.aspx

+0

사실, 병렬화는 최후의 수단입니다 (더 많은 하드웨어를 추가해야 함) - 속성을 색인화 할 수 있다면 Linqing을 사용하여 다음을 사용하여 한 두 개의 진도를 향상시킬 수 있어야합니다. 덜 순진한 데이터 구조로 뒷받침되는 IQueriable. – Squirrel

0

또 다른 대답은 같은 메모리 오브젝트 데이터베이스에하여 백업 할 수 있습니다 : 비 인덱스 자원의 db4o