2008-12-10 6 views
12

프로젝트가있어서 ASP.NET에서 많은 양의 독점 데이터에 액세스해야합니다. 이것은 공유 메모리에 데이터를로드하여 Linux/PHP에서 수행되었습니다. Memory Mapped Files를 사용하려고 시도하는지, 아니면 더 나은 .NET 지원을 통해 더 좋은 방법이 있는지 궁금합니다. 데이터 캐시를 사용할 생각 이었지만 캐시에 저장되는 데이터 크기의 모든 함정에 대해 확신 할 수 없었습니다.메모리 매핑 된 파일 .NET

답변

10

C# 용 메모리 매핑 라이브러리를 찾으려면 Tomas Restrepo's filemap 래퍼를 살펴보십시오. LGPL의 허가를 받았습니다.

3

많은 양의 데이터가있을 때 메모리 매핑 파일을 사용할 수 있으며 프로세스 경계를 ​​통해 마샬링하는 데 드는 비용이 들지 않으려 고합니다. 나는 비슷한 목적으로 그것을 사용했다. MMF를 활용하려면 .NET에서 불안전하고 고정 된 메모리 개념을 상당히 편하게 사용해야합니다. Apparently, 엔터프라이즈 라이브러리의 캐싱 블록에는 기본 C# API를 래핑하는 코드가 들어 있습니다. 나는 적어도 다른 하나의 구현체를 다른 곳에서 보았다.

마샬링 비용으로 생활 할 수 있다면 일종의 .NET Remoting 솔루션을 사용하는 것이 더 쉽고 우아 할 것입니다.

1

Cache [] 객체에 던져 넣기 만하면됩니다. 실제 파일을 기반으로 캐시 만료를 설정할 수 있습니다. 그런 다음 실제 파일을 수정할 때마다 내용이 캐시의 오브젝트에 대해 널 (null)이되며 다시로드 할 수 있습니다. 많은 수의 바이트를 처리하는 경우에는 적합하지 않을 수 있습니다.

byte[] fileBytes = Cache["fileBytes"]; 
if (null == fileBytes) { 
    // reload the file and add it to the cache. 
    string fileLocation = Server.MapPath("path/to/file.txt"); 
    // Just a same of some bytes. 
    fileBytes = new byte[10]; 
    Cache.Insert(fileLocation, fileBytes, new System.Web.Caching.CacheDependency(fileLocation)); 
} 

캐시의 성능 특성과 많은 양의 데이터에 대한 구체적인 답변이 없습니다. http://www.alachisoft.com/ncache/asp-net-cache.html 응용 프로그램과 캐시간에 공유해야하는 캐시 공간을 2 ~ 3GB로 확보해야합니다.