我有一個項目,它需要訪問ASP.NET中的大量專有數據。這是通過在共享內存中加載數據在Linux/PHP上完成的。我想知道是否嘗試使用內存映射文件將是要走的路,或者如果有更好的.NET支持更好的方法。我正在考慮使用數據緩存,但不確定緩存中保存的所有數據大小的缺陷。內存映射文件.NET
12
A
回答
10
如果您正在尋找C#的內存映射庫,請查看Tomas Restrepo's filemap包裝。它是根據LGPL授權的。
3
當您擁有大量數據並且不想承擔跨進程邊界封送的成本時,可以使用內存映射文件。我用它來達到類似的目的。你需要對.NET中不安全和固定的內存概念感到滿意,以利用MMF。 Apparently,企業庫的緩存塊包含包裝底層C#API的代碼。我在其他地方至少看到過一次其他的實施。
如果您可以忍受編組成本,那麼使用某種.NET遠程處理解決方案可能會更輕鬆,更優雅。
1
您可能只想將其放入Cache []對象中。您可以根據實際文件設置緩存過期。然後,無論何時修改實際文件,緩存中的對象的內容都將爲空,並且可以重新加載它。如果你處理大量的字節,這可能不合適。
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到3個緩存空間的緩存空間。
27
我知道這是有點晚,但.NET 4.0框架現在支持內存映射文件的開箱:
http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx
相關問題
- 1. .NET 4內存映射文件
- 2. NET 4.0內存映射文件性能
- 3. 內存映射文件C++
- 4. Windows內存映射文件
- 5. 內存映射文件
- 6. .Net 4.0內存映射文件對RDMS存儲
- 7. 寫入內存映射文件比非內存映射文件慢
- 8. 內存映射文件 - 映射結構而不是文件?
- 9. 文件系統 - 內存映射文件
- 10. 如何在.Net中更新內存映射文件中的值
- 11. 內存映射
- 12. 何時使用內存映射文件?
- 13. 鏈接增強內存映射文件
- 14. 內存映射庫的文件名osx
- 15. 截斷內存映射文件
- 16. 追加到內存映射文件
- 17. Java內存映射文件和交換
- 18. FILE_FLAG_DELETE_ON_CLOSE和內存映射文件
- 19. Java - 內存映射文件和刷新
- 20. 識別內存映射文件
- 21. C++:內存映射文件上的Fetch_add
- 22. 內存映射文件的位置
- 23. C++:帶內存映射文件的DLL
- 24. C#訪問內存映射文件
- 25. 截斷內存映射文件
- 26. 託管內存映射文件
- 27. 命名內存映射文件
- 28. 內存映射文件到WPF網格
- 29. 內存映射文件偏移量低
- 30. 內存映射文件誤解?