Я пытаюсь кэшировать большое количество данных в физической памяти и делиться ими для других процессов в локальной среде. Поэтому я придумал MMF и прочитал документ Microsoft MMF, увидел несколько примеров и начал настраивать подобный код.
MemoryMappedFile MMF = MemoryMappedFile.CreateNew("Features", MaxSize);
.
.
.
using (MemoryMappedViewStream stream = MMF.CreateViewStream())
{
BinaryWriter write = new BinaryWriter(stream);
.
.
.
// Fetched the data from database and store it into Rowdata variable.
while (Rowdata.Read())
{
byte[] data = Rowdata.GetFieldValue<byte[]>(0);
write.Write(data);
}
}
Он не хранит данные в памяти
IVSSharedMemory - это то, над чем я работаю, но объем памяти должен быть намного выше этого.
Есть ли что-то, что я забыл сделать, когда создал файл отображения памяти? пожалуйста, скажите мне, если есть. Я погуглил это сразу после того, как заметил это неожиданное поведение, и некоторые сказали, что это виртуальная память. Но я не могу не думать, что это неправда, потому что в документе это объясняется в разделе ниже.
Непостоянные файлы с отображением в памяти
Методы CreateNew и CreateOrOpen создают файл с отображением в памяти, который не сопоставляется с существующим файлом на диске.
Заранее спасибо. Только что подтвердил, что это то, для чего предназначен MMF.
ОБНОВИТЬ
Кажется, это действительно виртуальная память. Как прокомментировал Майк З, я проверил воспоминания о том, что мое приложение хранит в инструменте VMMAP, и в результате я получил именно то, что хотел.
Но взгляните на это, количество выделенной памяти изменилось. Это происходит, когда мое приложение загружает все данные полностью. Я могу предположить, что предыдущий размер просто указывает на MaxSize
который я назначил при создании MMF.
Это ушло на физическое дисковое пространство или что-то?
Я много читал о MemoryMappedFile и пытался увидеть, что под землей. Но я до сих пор не понимаю, почему это происходит. Серьезно, где находятся данные? где я могу это проверить?