Быстрый доступ к распределенной памяти в C#

У меня есть служба CF WCF, которая размещает 120 ГБ памяти в Dictionary<File,byte[]> для очень быстрого доступа к содержимому файла, который действительно хорошо работал со мной. После доступа содержимое файла было помещено в MemoryStream и прочитано

Этот сервис необходимо перезапускать каждый день, чтобы загрузить некоторые статические данные из базы данных, которые могут меняться ежедневно. Перезапуск занял так много времени из-за огромных данных, которые необходимо снова загрузить в память

Поэтому я решил разместить эту память в другом процессе на той же машине и получить к ней доступ через сокеты. Процесс данных всегда будет запущен. TcpListener/Client и NetworkStream использовались аналогично следующему

memoryStream.Read(position.PositionData, 0, position.SizeOfData);

position.NetworkStream.Write(position.PositionData, 0, position.SizeOfData);

Проблема в том, что это было в 10 раз медленнее, чем размещение памяти в одном и том же процессе. Ожидается замедление, но в 10 раз это слишком много.

Я думал о MemoryMappedFiles, но они более полезны для произвольного доступа к конкретному представлению файла. Мой доступ к файлам является последовательным от начала до конца.

Есть ли другая технология или библиотека, которая может быть использована в моем случае? или это просто так ожидается?

1 ответ

Решение

Я предполагаю, что вы используете SQLServer. Если это так, уведомления Service Broker и SQLNotificaiton Or Query могут быть вашими друзьями здесь. Я полагаю, вам нужно больше модели push-сообщений, которая автоматически распространяет изменения обратно в сервис (если что-то меняется в БД). Поэтому избегайте перезапуска процесса, интенсивно использующего память / ресурсы, поэтому нет необходимости переназначать свой тяжелый словарь.

Другие вопросы по тегам