2012年11月13日

C#の便利なクラス紹介 その1

おひさしぶりです。 みやじーです。

最近C#でツールの作成をしている際に、
20Gバイト程度のファイルを扱う必要が出てきてしまい、
一度にメモリには載らないので困っていたのですが・・・

"メモリマップドファイル"というものを耳にしたので調べてみましたぴかぴか(新しい)

System.IO.MemoryMappedFiles名前空間にある
"MemoryMappedFile"というクラスが非常に便利ですexclamation×2

このクラスは、メモリ上にファイルをマッピングして扱うことができます。
シーク処理などは、クラス内部で隠ぺいしてくれているため、
非常に簡単にデータを取り扱うことが可能です。
一度にメモリに載らないファイルもこれで簡単に扱えます手(チョキ)


(使用例)

string fileName = "test.dat"
using (var memoryMappedFile = MemoryMappedFile.CreateFromFile(fileName))
{
using (var viewAccessor = memoryMappedFile.CreateViewAccessor())
{
// 100000byte目に書き込む
byte val = 100;
viewAccessor.Write(100000, val);

  // 100000byte目から読み込む
val = viewAccessor.ReadByte(100000);
}
}


詳しくは
http://msdn.microsoft.com/ja-jp/library/vstudio/dd267544.aspx

同様の機能のクラスを自作しようとしていたのですが、
こちらを使用して事なきを得ました。

また、プロセス間で情報を共有する手段としても使えるので、
こちらの用途でもお世話になりそうですあせあせ(飛び散る汗)

非常に便利なクラスなのでぜひ使用してみて下さい手(グー)











posted by 管理人 at 21:33 | プログラミング