簡體   English   中英

內存映射文件.NET

[英]Memory Mapped Files .NET

我有一個項目,它需要訪問ASP.NET中的大量專有數據。 這是在Linux / PHP上通過將數據加載到共享內存中完成的。 我想知道是否將嘗試使用內存映射文件,或者是否有更好的方法具有更好的.NET支持。 我當時在考慮使用數據緩存,但不確定在緩存中保存數據大小的所有陷阱。

我知道這有點晚了,但是.NET 4.0框架現在支持開箱即用的內存映射文件:

http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx

如果您正在尋找C#的內存映射庫, 請看一下Tomas Restrepo的文件映射包裝器。 它是根據LGPL許可的。

當您有大量數據並且不想承擔跨流程將其封送的成本時,可以使用“內存映射”文件。 我已將其用於類似目的。 為了充分利用MMF,您需要對.NET中不安全和固定的內存概念相當熟悉。 顯然 ,企業庫的緩存塊包含包裝基礎C#API的代碼。 我在其他地方至少看到了另一種實現。

如果您可以承擔封送處理的費用,則使用某種.NET遠程處理解決方案可能會更輕松,更優雅。

您可能只想將其扔到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到3 Gb的緩存空間,這些空間必須在應用程序和緩存之間共享。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM