Существует ли системная переменная глобального списка - PullRequest
0 голосов
/ 05 августа 2020

У меня есть трехмерный список вроде этого:
List<List<List<Vector128<byte>>>> dimensionLIST = new List<List<List<Vector128<byte>>>>();

Теперь, когда я заполняю этот список данными, которые использую для вычислений, он займет 20 ГБ оперативной памяти.

На вычисления, которые я делаю, уходит 10 часов. Итак, я создал решение, в котором я открываю 10 экземпляров приложения, в котором я разделил работу на 10 частей, в результате чего расчет займет всего 1 час (у меня в компьютере 24 ядра)

Проблема в том, что каждый экземпляр приложения формы должен будет прочитать это dimensionLIST, что означает, что это займет 20 ГБ * 10 = 200 ГБ ОЗУ, что просто не является решением *. 1012 *

Мой вопрос: есть ли возможность поместить это dimensionLIST в какую-то переменную системного глобального списка, к которой могут получить доступ все 10 экземпляров?

( Следует отметить, что я не могу разделить это dimensionLIST на 10 частей, потому что каждому экземпляру действительно нужен весь список)

Спасибо!

1 Ответ

1 голос
/ 05 августа 2020

Вы можете использовать Именованные каналы .

Именованный канал - это именованный, односторонний или дуплексный канал для связи между сервером каналов и одним или несколькими клиентами каналов. Все экземпляры именованного канала имеют одно и то же имя канала, но каждый экземпляр имеет свои собственные буферы и дескрипторы и предоставляет отдельный канал для взаимодействия клиент / сервер. Использование экземпляров позволяет нескольким клиентам канала одновременно использовать один и тот же именованный канал. Любой процесс может получить доступ к именованным каналам при условии проверки безопасности, что делает именованные каналы простой формой связи между связанными или несвязанными процессами.

АЛЬТЕРНАТИВНО

Используйте Windows Объект сопоставления файлов , который позволяет вам разделять память между процессами.

Как указано в комментарии Файлы сопоставления памяти могут быть жизнеспособным вариантом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...