Мое понимание того, как файлы с отображением памяти работают в C#, заключается в том, что каждый запрос данных приводит к копии. Например, если у вас есть большая структура данных, сохраняемая в виде файла, использование файла с отображением памяти приведет к тому, что память для фактического файла будет отображена в ОЗУ, а копия будет находиться в куче сборщика мусора после того, как она будет прочитана из файла.
Я предполагаю, что это связано с тем, что указатели и сборщик мусора вообще не ладят друг с другом.
Итак, есть ли способ обойти это?
- Возможно, через какой-то смешанный режим C++, который может предоставлять управляемый API поверх данных, отображаемых в памяти?
- Как насчет прямого манипулирования указателями с небезопасным C#?
Общая проблема, которую я пытаюсь решить, заключается в совместном использовании большой структуры данных между несколькими процессами. Структура данных используется для ответа на небольшой набор «вопросов», которые могут быть представлены в виде простого API (то есть, в основном, узкоспециализированного индекса множества других данных).
Кстати, не делает ли это .NET API бесполезным для сценария «совместного использования больших объемов данных»?