我检查了内存映射文件以检查它们的性能效果,并且在执行此操作时我注意到,如果我重新创建 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();
}
}
}
}
编辑:
代码现在应该编译。
新观察:
如果我在“发布”(而不是调试)中进行编译,则问题消失且结果有意义当使用 W2008 在服务器上(而不是使用 W7 在 PC 上)运行代码时,问题消失且结果有意义