Ho un progetto e ha bisogno di accedere a una grande quantità di dati proprietari in ASP.NET. Questo è stato fatto su Linux/PHP caricando i dati nella memoria condivisa. Mi chiedevo se provare a utilizzare Memory Mapped Files sarebbe la strada da percorrere, o se c'è un modo migliore con un migliore supporto .NET. Stavo pensando di usare Data Cache ma non sono sicuro di tutte le insidie della dimensione dei dati salvati nella cache.File mappati in memoria .NET
risposta
Se stai cercando una libreria Memory Mapped per C#, dai uno sguardo al wrapper Tomas Restrepo's filemap. È concesso in licenza sotto licenza LGPL.
I file di memoria mappati possono essere utilizzati quando si dispone di una grande quantità di dati e non si desidera sostenere il costo del marshalling attraverso i limiti del processo. L'ho usato per uno scopo simile. È necessario essere abbastanza a proprio agio con concetti di memoria non sicuri e bloccati in .NET per sfruttare gli MMF. Apparently, il blocco di memorizzazione nella cache della Enterprise Library contiene codice che racchiude l'API C# sottostante. Ho visto almeno un'altra implementazione altrove.
Se è possibile convivere con il costo del marshalling, è probabilmente più semplice ed elegante utilizzare una soluzione di remoting .NET.
Si consiglia di lanciarlo nell'oggetto Cache []. È possibile impostare una scadenza della cache basata sul file reale. Quindi, ogni volta che si modifica il file effettivo, i contenuti saranno nulli per l'oggetto nella cache e sarà possibile ricaricarlo. Questo potrebbe non essere appropriato se hai a che fare con un numero elevato di byte.
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));
}
Immagino di non avere una risposta specifica sulle caratteristiche di prestazioni della cache e grandi quantità di dati. http://www.alachisoft.com/ncache/asp-net-cache.html Dichiara di ottenere tra 2 e 3 concerti di spazio nella cache che devono essere condivisi tra l'applicazione e la cache.
So che questo è un po 'tardi, ma il framework .NET 4.0 ora supporta file mappati in memoria fuori dalla scatola:
http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx
- 1. Monitoraggio file mappati memoria Windows
- 2. File mappati memoria di Windows
- 3. File mappati in memoria in Java
- 4. Caratteristiche prestazionali della memoria mappati file di
- 5. Posix memoria condivisa e file mappati
- 6. I file mappati di memoria Linux riservano molta memoria fisica
- 7. In Linux, quali tipi di file sono mappati in memoria?
- 8. Come utilizzare le operazioni interbloccate su file mappati in memoria .Net
- 9. Come creare e scrivere su file mappati in memoria?
- 10. Come comunicare tra due JVM utilizzando file mappati in memoria?
- 11. Registri mappati in memoria in Python
- 12. Memoria File mappati e scritture atomiche di blocchi singoli
- 13. Implementazione IList di file mappati in memoria, per la memorizzazione di serie di dati di grandi dimensioni "in memoria"?
- 14. Prestazioni di file mappati in memoria male di Linux con accesso casuale C++ e Python
- 15. Modifica ZipArchive in memoria .NET
- 16. Posso ottenere un percorso per un file mappato in memoria? (.NET 4.0)
- 17. Memoria condivisa distribuita in .NET
- 18. MATLAB: come creare più file di memoria mappati con un semplice "iteratore"?
- 19. Limite memoria stack .NET
- 20. Memoria massima raggiungibile .NET?
- 21. In memoria OleDbConnection in Excel File
- 22. Ricerca .NET "Perdita di memoria"
- 23. File temporanei in .Net
- 24. Come svuotare in modo asincrono un file mappato in memoria?
- 25. Analisi della memoria .NET VS2010 - estremamente lento
- 26. Crea file in memoria non filesystem
- 27. File in memoria per l'unittest
- 28. C - crea file in memoria
- 29. Backup del database in memoria SQLite in .NET
- 30. ricorsive file Cerca in .net