2009-11-13 6 views
0

나는 이미지의 캐시로 사용할 객체 목록 (문자열 파일 이름, BitmapImage 이미지)이 있습니다.Linq 조회 동적 목록

private static readonly List<ImageData> imageCache = new List<ImageData>(); 

필자는 필요할 때마다이 캐시에서 이미지 캐시를 확인하기 위해 Lookup을 만들었습니다. 이미지가 목록에 없으면 목록에 추가됩니다. 보았다

정적 나는 FileNameLookup 때마다 다시하지 않는 한 나는 조회는 결코 동일한 파일 이름이 있습니까 객체를 반환 목록에 요소를 추가, 그러나

private static Lookup<string, ImageData> FileNameLookup = (Lookup<string, ImageData>) 
       imageCache.ToLookup(data => data.ImageFileName, data => data); 

작성됩니다.

public static void Reinit() 
{ 
    FileNameLookup = (Lookup<string, ImageData>) imageCache.ToLookup(data => 
               data.ImageFileName, data => data); 
} 

목록의 내용이 정적 인 경우에만 조회를 사용해야합니까? 사전을 쉽게 사용할 수 있지만 조회를 해보고 싶었습니다.

건배,

제임스

답변

0

FileNameLookup 정적 변수가 시간에 어떤 순간에 imageCache 목록의 내용에서 내장되어 있습니다. 나중에 새 요소를 목록에 추가하면 조회가 반영되지 않습니다. 내장 된 ASP.NET cache을 사용할 수없는 경우 사전이 실제로 캐싱을위한 더 나은 솔루션이 될 것입니다.

0

어느 파일 이름은 키와 이미지 사전을 사용하여이 값

이다 또는 당신이 imageData의를 유지하는 것을 선호하는 경우 파일 이름 속성을 추출하고 키로 사용 KeyedCollection의 서브 클래스를 생성 할 수 있습니다 개체 :

class ImageCache : System.Collections.ObjectModel.KeyedCollection<string, ImageData> 
{ 
    protected override string GetKeyForItem(ImageData item) 
    { 
     return item.ImageFileName; 
    } 
} 

ImageCache c = new ImageCache(); 
string path = @"c:\somepath\image.jpg"; 
if (c.Contains(path)) 
{ 
    return c[path]; 
} 
else 
{ 
    // put something into the cache 
} 
처럼 사용