Visual Studio 2010 Release Candidate
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.MemoryMappedFiles;
namespace MmfOffsetFail
{
class Program
{
static void Main(string[] args)
{
var mmf = MemoryMappedFile.CreateNew("TestMMF", 128000);
using (var view = mmf.CreateViewAccessor())
{
for (int i = 0; i < 32000; i++)
{
view.Write(i * 4, i);
}
}
ShowViewContents(mmf, 0);
ShowViewContents(mmf, 100);
ShowViewContents(mmf, 4096);
ShowViewContents(mmf, 16384);
ShowViewContents(mmf, 24000);
Console.ReadLine();
}
private static void ShowViewContents(MemoryMappedFile mmf, int viewOffset)
{
using (MemoryMappedViewAccessor view = mmf.CreateViewAccessor(viewOffset * 4, 512))
{
Console.WriteLine("Reading from MemoryMappedViewAccessor with offset = {0} ({1} bytes)", viewOffset, viewOffset * 4);
var viewHandle = view.SafeMemoryMappedViewHandle;
for (int i = 0; i < 5; i++)
{
// Really need to apply an offset when using viewHandle here, but there's no way to know what offset is being applied by the view.
Console.WriteLine("Offset {0} : MemoryMappedViewAccessor => {1}, SafeMemoryMappedViewHandle => {2}", i, view.ReadInt32(i * 4), viewHandle.Read<Int32>((ulong)i * 4));
}
}
}
}
}
Reading from MemoryMappedViewAccessor with offset = 0 (0 bytes)
Offset 0 : MemoryMappedViewAccessor => 0, SafeMemoryMappedViewHandle => 0
Offset 1 : MemoryMappedViewAccessor => 1, SafeMemoryMappedViewHandle => 1
Offset 2 : MemoryMappedViewAccessor => 2, SafeMemoryMappedViewHandle => 2
Offset 3 : MemoryMappedViewAccessor => 3, SafeMemoryMappedViewHandle => 3
Offset 4 : MemoryMappedViewAccessor => 4, SafeMemoryMappedViewHandle => 4
Reading from MemoryMappedViewAccessor with offset = 100 (400 bytes)
Offset 0 : MemoryMappedViewAccessor => 100, SafeMemoryMappedViewHandle => 0
Offset 1 : MemoryMappedViewAccessor => 101, SafeMemoryMappedViewHandle => 1
Offset 2 : MemoryMappedViewAccessor => 102, SafeMemoryMappedViewHandle => 2
Offset 3 : MemoryMappedViewAccessor => 103, SafeMemoryMappedViewHandle => 3
Offset 4 : MemoryMappedViewAccessor => 104, SafeMemoryMappedViewHandle => 4
Reading from MemoryMappedViewAccessor with offset = 4096 (16384 bytes)
Offset 0 : MemoryMappedViewAccessor => 4096, SafeMemoryMappedViewHandle => 0
Offset 1 : MemoryMappedViewAccessor => 4097, SafeMemoryMappedViewHandle => 1
Offset 2 : MemoryMappedViewAccessor => 4098, SafeMemoryMappedViewHandle => 2
Offset 3 : MemoryMappedViewAccessor => 4099, SafeMemoryMappedViewHandle => 3
Offset 4 : MemoryMappedViewAccessor => 4100, SafeMemoryMappedViewHandle => 4
Reading from MemoryMappedViewAccessor with offset = 16384 (65536 bytes)
Offset 0 : MemoryMappedViewAccessor => 16384, SafeMemoryMappedViewHandle => 16384
Offset 1 : MemoryMappedViewAccessor => 16385, SafeMemoryMappedViewHandle => 16385
Offset 2 : MemoryMappedViewAccessor => 16386, SafeMemoryMappedViewHandle => 16386
Offset 3 : MemoryMappedViewAccessor => 16387, SafeMemoryMappedViewHandle => 16387
Offset 4 : MemoryMappedViewAccessor => 16388, SafeMemoryMappedViewHandle => 16388
Reading from MemoryMappedViewAccessor with offset = 24000 (96000 bytes)
Offset 0 : MemoryMappedViewAccessor => 24000, SafeMemoryMappedViewHandle => 16384
Offset 1 : MemoryMappedViewAccessor => 24001, SafeMemoryMappedViewHandle => 16385
Offset 2 : MemoryMappedViewAccessor => 24002, SafeMemoryMappedViewHandle => 16386
Offset 3 : MemoryMappedViewAccessor => 24003, SafeMemoryMappedViewHandle => 16387
Offset 4 : MemoryMappedViewAccessor => 24004, SafeMemoryMappedViewHandle => 16388
Reading from MemoryMappedViewAccessor with offset = 0 (0 bytes)
Offset 0 : MemoryMappedViewAccessor => 0, SafeMemoryMappedViewHandle => 0
Offset 1 : MemoryMappedViewAccessor => 1, SafeMemoryMappedViewHandle => 1
Offset 2 : MemoryMappedViewAccessor => 2, SafeMemoryMappedViewHandle => 2
Offset 3 : MemoryMappedViewAccessor => 3, SafeMemoryMappedViewHandle => 3
Offset 4 : MemoryMappedViewAccessor => 4, SafeMemoryMappedViewHandle => 4
Reading from MemoryMappedViewAccessor with offset = 100 (400 bytes)
Offset 0 : MemoryMappedViewAccessor => 100, SafeMemoryMappedViewHandle => 100
Offset 1 : MemoryMappedViewAccessor => 101, SafeMemoryMappedViewHandle => 101
Offset 2 : MemoryMappedViewAccessor => 102, SafeMemoryMappedViewHandle => 102
Offset 3 : MemoryMappedViewAccessor => 103, SafeMemoryMappedViewHandle => 103
Offset 4 : MemoryMappedViewAccessor => 104, SafeMemoryMappedViewHandle => 104
Reading from MemoryMappedViewAccessor with offset = 4096 (16384 bytes)
Offset 0 : MemoryMappedViewAccessor => 4096, SafeMemoryMappedViewHandle => 4096
Offset 1 : MemoryMappedViewAccessor => 4097, SafeMemoryMappedViewHandle => 4097
Offset 2 : MemoryMappedViewAccessor => 4098, SafeMemoryMappedViewHandle => 4098
Offset 3 : MemoryMappedViewAccessor => 4099, SafeMemoryMappedViewHandle => 4099
Offset 4 : MemoryMappedViewAccessor => 4100, SafeMemoryMappedViewHandle => 4100
Reading from MemoryMappedViewAccessor with offset = 16384 (65536 bytes)
Offset 0 : MemoryMappedViewAccessor => 16384, SafeMemoryMappedViewHandle => 16384
Offset 1 : MemoryMappedViewAccessor => 16385, SafeMemoryMappedViewHandle => 16385
Offset 2 : MemoryMappedViewAccessor => 16386, SafeMemoryMappedViewHandle => 16386
Offset 3 : MemoryMappedViewAccessor => 16387, SafeMemoryMappedViewHandle => 16387
Offset 4 : MemoryMappedViewAccessor => 16388, SafeMemoryMappedViewHandle => 16388
Reading from MemoryMappedViewAccessor with offset = 24000 (96000 bytes)
Offset 0 : MemoryMappedViewAccessor => 24000, SafeMemoryMappedViewHandle => 24000
Offset 1 : MemoryMappedViewAccessor => 24001, SafeMemoryMappedViewHandle => 24001
Offset 2 : MemoryMappedViewAccessor => 24002, SafeMemoryMappedViewHandle => 24002
Offset 3 : MemoryMappedViewAccessor => 24003, SafeMemoryMappedViewHandle => 24003
Offset 4 : MemoryMappedViewAccessor => 24004, SafeMemoryMappedViewHandle => 24004