2010年8月19日木曜日

[.NET]メモリマップファイル

C#4.0から使えるようになったメモリマップファイルですが、興味本位でちょっと触ってみました。
コードはこんな感じ。

private void button1_Click(object sender, EventArgs e)
{
    //using System.IO.MemoryMappedFiles;

    MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("TestMMF"1024);
    using (MemoryMappedViewAccessor mmfa = mmf.CreateViewAccessor())
    {
        var data = "1192つくろう鎌倉幕府! " + DateTime.Now.ToString();
        var byteData = Encoding.UTF8.GetBytes(data);
        mmfa.WriteArray(0, byteData, 0, byteData.Length);
        mmfa.Flush();
    }
}

private void button2_Click(object sender, EventArgs e)
{
    MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("TestMMF"1024);
    using (MemoryMappedViewAccessor mmfa = mmf.CreateViewAccessor())
    {
        var buf = new byte[1024];
        mmfa.ReadArray(0, buf, 0, buf.Length);

        int len = 0;
        for (len = 0; len < buf.Length; len++)
        {
            if (buf[len] == 0x00)
            {
                break;
            }
        }

        var str = Encoding.UTF8.GetString(buf, 0, len);

        MessageBox.Show("結果=[" + str + "]");
    }
}


結果、プロセス間で情報を共有できました。
しかし、System.IOとの連携というか、私が見つけられなかっただけなのかもしれませんが、Stream系のクラスとうまく連携できないようです。
そのあたり今度調査してみよう。

0 件のコメント :