c# - Archivos mapeados de memoria.NET
asp.net memory-mapped-files (4)
Es posible que desee simplemente lanzarlo en el objeto Caché []. Puede establecer una caducidad de caché basada en el archivo real. Luego, cada vez que modifique el archivo real, el contenido será nulo para el objeto en la memoria caché y podrá volver a cargarlo. Esto puede no ser apropiado si se trata de una gran cantidad de bytes.
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));
}
Supongo que no tengo una respuesta específica sobre las características de rendimiento de la memoria caché y grandes cantidades de datos. http://www.alachisoft.com/ncache/asp-net-cache.html Indica que obtiene entre 2 y 3 gigas de espacio en caché que deben compartirse entre su aplicación y el caché.
Tengo un proyecto y necesita acceder a una gran cantidad de datos de propiedad en ASP.NET. Esto se hizo en Linux / PHP cargando los datos en la memoria compartida. Me preguntaba si tratar de usar Memory Mapped Files sería el camino a seguir, o si hay una mejor manera con mejor soporte de .NET. Estaba pensando en usar la memoria caché de datos pero no estoy seguro de todos los inconvenientes del tamaño de los datos que se guardan en la memoria caché.
Los archivos de memoria asignada se pueden usar cuando tiene una gran cantidad de datos y no quiere incurrir en el costo de ordenarlos a través de los límites del proceso. Lo he usado para un propósito similar. Debes sentirte bastante cómodo con los conceptos de memoria insegura y anclada en .NET para aprovechar los archivos MMF. Aparentemente , el bloque de almacenamiento en caché de Enterprise Library contiene código que envuelve la API C # subyacente. He visto al menos otra implementación en otro lugar.
Si puede vivir con los costos de clasificación, probablemente sea más fácil y más elegante usar algún tipo de solución .NET remota.
Sé que esto es un poco tarde, pero el marco .NET 4.0 ahora es compatible con archivos mapeados en memoria listos para usar:
http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx
Si está buscando una biblioteca de memoria asignada para C #, eche un vistazo al contenedor de mapa de archivos de Tomas Restrepo . Está licenciado bajo LGPL.