パフォーマンスへの影響を確認するためにメモリ マップト ファイルを調べたところ、ファイルに書き込むたびに BinaryWriter を再作成すると、コードの実行速度が 30% 速くなることがわかりました。
誰か説明がありますか?
このコードは、以下のコードよりも 30% 高速に実行されます。
using (MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("testmap", 1000000000))
{
DateTime dt;
bool mutexCreated;
Mutex mutex = new Mutex(false, "testmapmutex", out mutexCreated);
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
dt = DateTime.Now;
for (int i = 0; i < 1000000; i++)
{
BinaryWriter writer = new BinaryWriter(stream); // In or out?
try
{
mutex.WaitOne();
writer.Write(i);
mutex.ReleaseMutex();
}
}
}
}
このコードは、上記のコードよりも 30% 遅く実行されます。
using (MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("testmap", 1000000000))
{
DateTime dt;
bool mutexCreated;
Mutex mutex = new Mutex(false, "testmapmutex", out mutexCreated);
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
dt = DateTime.Now;
BinaryWriter writer = new BinaryWriter(stream); // In or out?
for (int i = 0; i < 1000000; i++)
{
try
{
mutex.WaitOne();
writer.Write(i);
mutex.ReleaseMutex();
}
}
}
}
編集:
コードは今すぐコンパイルする必要があります。
新しい観測:
「リリース」(代わりにデバッグ) でコンパイルしている場合、問題はなくなり、結果は理にかなっています (W7 を使用する PC ではなく) W2008 を使用するサーバーでコードを実行すると、問題はなくなり、結果は理にかなっています