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é.Archivos de memoria asignados .NET
Respuesta
Si está buscando una biblioteca de memoria asignada para C#, eche un vistazo al contenedor Tomas Restrepo's filemap. Está licenciado bajo LGPL.
Memoria Los archivos asignados 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. Apparently, 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 distribución, probablemente sea más fácil y más elegante utilizar algún tipo de solución .NET remota.
Es posible que desee arrojarlo 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 de caché que deben compartirse entre su aplicación y el caché.
Sé que esto es un poco tarde, pero el marco .NET 4.0 ahora soporta archivos mapeados en memoria fuera de la caja:
http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx
- 1. memoria compartida Posix vs archivos asignados
- 2. Memoria Archivos asignados y escrituras atómicas de bloques individuales
- 3. Los archivos asignados a la memoria Linux reservan mucha memoria física
- 4. llamada a un constructor en una memoria ya asignados
- 5. Objetos asignados en el montón
- 6. ¿Cuánto miden exactamente los contadores de rendimiento .NET de la memoria .NET "Gen X Heap Size"?
- 7. Nombres de fotogramas asignados automáticamente
- 8. ¿Máxima memoria alcanzable .NET?
- 9. .net ¿ArrayList.Clear libera memoria?
- 10. .NET Huella de memoria EXE
- 11. Fugas de memoria en .NET
- 12. . Cachés simples en memoria .Net
- 13. Liberar texturas (objetos GLKTextureInfo) asignados por GLKTextureLoader
- 14. C punteros asignados? ¿Qué es esto?
- 15. Punteros a objetos asignados estáticamente
- 16. Memoria compartida distribuida en .NET
- 17. Análisis de memoria de objetos en .NET
- 18. Enumeración de métodos abreviados asignados en Excel
- 19. Salida exitosa rápida de C++ con muchos objetos asignados
- 20. Lista de TODOS los tipos MIME en el planeta, asignados a las extensiones de archivos?
- 21. VS2010 .NET Análisis de memoria: extremadamente lento
- 22. Multiple .NET procesa la huella de memoria
- 23. .NET RegEx "fuga de memoria" investigación
- 24. Fuga de memoria en .Net Speech.Synthesizer?
- 25. ¿Las secuencias de .NET ahorran memoria?
- 26. Perfilador de memoria para .NET Compact Framework
- 27. ¿Mejor perfilador de rendimiento y memoria .NET?
- 28. Dónde hacer malloc()/free() Almacenar tamaños y direcciones asignados?
- 29. Archivos temporales en .Net
- 30. Trituración de archivos en .NET