2010-01-15 3 views
0

상위 컬렉션에서 수행되는 '필터 쿼리'를 캐싱하기 위해 항목 X의 하위 모음을 항목 X의 상위 모음 내에 저장하는 것이 좋습니다. (색상 및 유형과 같이 함께 사용하지 않음) 아니면 컬렉션을 반복하고 올바른 컬렉션을 임시 컬렉션에 반환해도됩니까?컬렉션 내부에 하위 컬렉션 (기본 컬렉션의 필터링 된 버전)을 캐시로 저장하고 있습니까?

Class ItemCollection : Inherits Collection(Of Item) 
    Private _types as New List(Of ItemCollection) //Cache 

    Function FilterByType(type) As ItemCollection 
     If Not _types.KeyExists(type) Then 
      _types.Add(type, New ItemCollection()) 
      For Each i in Me 
       If i.Type = type Then _types(type).Add(i) 
      Next 
     End If 
     Return _types(type) 
    End Function 

    //Same for FilterByColor(color) 
End Class 

Class Item 
    Public Color = "Blue" 
    Public [Type] = "One" 
End Class 

답변

1

나는 간단 시작하고 테스트 필터링 된 목록을 재생하는 성능 문제가 있음을 보여준다 경우 캐시를 추가 유지하는 것이 좋습니다. 게다가 List에 내장 된 필터링 방법을 사용하거나 LINQ 확장을 사용하여 필터링 코드를 크게 단순화 할 수 있습니다.

filtered = Me.Where(i => i.Type = type) 

는 (나는 내가 C#을 사람 해요, VB.NET에서 LINQ를 해본 적이 없다, 정확한 구문에 해제 될 수 있습니다.)

+0

내가 많이 고정 LINQ를 사용하기 시작 내 문제! 참으로 빠른 – Ropstah