C#共用記憶體整理

來源:互聯網
上載者:User

標籤:col   not   oca   methods   whether   release   capacity   許可權   enable   

1.System.IO.MemoryMappedFiles 記憶體對應檔類

記憶體對應檔將檔案的內容映射到應用程式的邏輯地址空間。 記憶體對應檔使程式員得以處理極大的檔案(這是因為可以並發管理記憶體),並且它們允許對檔案進行完整的隨機訪問而不需要尋找檔案。 記憶體對應檔還可以在多個進程之間進行共用。

CreateFromFile 方法基於磁碟上的現有檔案的指定路徑或 FileStream 建立一個記憶體對應檔。 未映射對應檔時,更改都將自動傳播到磁碟。

CreateNew 方法建立一個未映射到磁碟上的現有檔案的記憶體對應檔;而且這些方法還適合建立用於處理序間通訊 (IPC) 的共用記憶體。

記憶體對應檔與名稱相關聯。

您可以建立記憶體對應檔的多個視圖,包括部分檔案的視圖。 可以將某個檔案的相同部分映射到多個地址,以建立並發記憶體。 為了使兩個視圖能夠並發,必須基於同一記憶體對應檔建立這兩個視圖。 對同一檔案建立兩個檔案對應的兩個視圖不具有並發性。(https://msdn.microsoft.com/zh-cn/library/system.io.memorymappedfiles.memorymappedfile(v=vs.100).aspx)

常用函數:

[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]public static MemoryMappedFile CreateOrOpen(    string mapName, //要分配給記憶體對應檔的名稱。    long capacity,//要分配給記憶體對應檔的最大大小(以位元組為單位)。    MemoryMappedFileAccess access,//用於指定記憶體對應檔允許的訪問類型的枚舉值之一。 預設值為 ReadWrite。     MemoryMappedFileOptions options,//枚舉值的按位組合,用於為記憶體對應檔指定記憶體配置選項。    MemoryMappedFileSecurity memoryMappedFileSecurity,//可以針對記憶體對應檔授予的檔案訪問和操作許可權。此參數可以為 null。    HandleInheritability inheritability//用於指定記憶體對應檔的控制代碼能否由子進程繼承的枚舉值之一。 預設值為 None。 )
在系統記憶體中建立或開啟一個具有指定容量、訪問類型、記憶體配置、安全許可權和繼承性的記憶體對應檔。
使用此方法建立或開啟一個不持久保留的記憶體對應檔(即,不與磁碟上的檔案關聯),您可以使用該檔案在進程之間共用資料。
using (var mmf = MemoryMappedFile.CreateOrOpen("testMmf", capacity, MemoryMappedFileAccess.ReadWrite))
{
    //通過MemoryMappedFile的CreateViewAccssor方法獲得共用記憶體的訪問器  
    var viewAccessor = mmf.CreateViewAccessor(0, capacity);
viewAccessor.Write(0, input.Length);
   //向共用記憶體4位置寫入字元  
   viewAccessor.WriteArray<char>(4, input.ToArray(), 0, input.Length);
}
public static MemoryMappedFile CreateNew(    string mapName, //要分配給記憶體對應檔的名稱。    long capacity   //要分配給記憶體對應檔的最大大小(以位元組為單位)。)
使用此方法建立一個不持久保留的記憶體對應檔(即,不與磁碟上的檔案關聯),您可以使用該檔案在進程之間共用資料。
 static void Main(string[] args) {     using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("testmap", 10000))     {         bool mutexCreated;         Mutex mutex = new Mutex(true, "testmapmutex", out mutexCreated);         using (MemoryMappedViewStream stream = mmf.CreateViewStream())         {             BinaryWriter writer = new BinaryWriter(stream);             writer.Write(1);         }         mutex.ReleaseMutex();         mutex.WaitOne();         using (MemoryMappedViewStream stream = mmf.CreateViewStream())         {             BinaryReader reader = new BinaryReader(stream);             Console.WriteLine("Process A says: {0}", reader.ReadBoolean());             Console.WriteLine("Process B says: {0}", reader.ReadBoolean());             Console.WriteLine("Process C says: {0}", reader.ReadBoolean());         }         mutex.ReleaseMutex();     } }

 

C#共用記憶體整理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.