У меня есть приложение, в котором инициализация включает чтение очень больших данных из файлов (~> 10 ГБ), а затем выполнение некоторых вычислений с этими данными (типа Dictionary). Шаг инициализации каждый раз занимает пару часов, хотя мои данные фиксированы/никогда не менялись. Что я хотел бы сделать, так это каким-то образом использовать процесс для предварительной загрузки этих данных в память, а другой процесс на том же компьютере для чтения непосредственно из него все данные только один раз и без какого-либо копирования. Пока нашел пару способов:
.Net Remoting с удаленными объектами. Однако этот подход сопряжен с затратами на маршалинг, поэтому в моем случае он не сработает, поскольку передача данных приведет к вдвое большему объему памяти в одной точке.
Файлы с отображением памяти. Этот вариант по-прежнему требует копирования данных, и в моем случае он не будет идеальным, поскольку мне нужно будет скопировать все> 10 ГБ данных. Я нашел несколько статей об использовании небезопасного доступа к адресам памяти, но я точно не знаю, как это работает.
Именованные каналы WCF. Этот подход похож на удаленное взаимодействие и по-прежнему требует передачи данных.
Какой самый эффективный способ для моего сценария?