Вы боретесь с деталями реализации BinaryWriter.Write (строка).Сначала записывается длина строки, необходимая для того, чтобы BinaryReader знал, сколько символов ему нужно прочитать при обратном чтении строки.Для коротких строк, таких как «1», он записывает один байт для хранения длины.
Так что смещение, которое вы передаете CreateViewStream (), является неправильным, пропуск 1 сделает его перезаписать частьстроки, написанной процессом A. Символ смайлика, который вы видите, является глифом для (char) 1.Байт длины, записанный процессом B.
Файлы, отображаемые в память, вызывают проблемы в управляемом коде.Обычно вы читаете и пишете им, объявляя структуру для установки макета и используя указатели для доступа к представлению, но это требует небезопасного кода.Потоки - довольно плохая абстракция для куска памяти, но необходимое зло.Кроме того, причина, по которой MMF стали доступны в .NET, заняла так много времени.