Страницы

Поиск по вопросам

четверг, 26 декабря 2019 г.

Ошибка с MemoryMappedFile (NotSupportedException) .net core при использовании под linux?

#c_sharp #linux


Доброе времени суток. Возникла необходимость делиться информацией между двумя приложениями.
Вспомнил что есть MemoryMappedFile, решил воспользоваться. Зашел msdn глянул работает
и под .net core - что очень важно. Так как рассматривается вариант запуска сервисов
под linux-ом. Но тут же я столкнулся с проблемой под linux-ом:


  "Unhandled Exception: System.PlatformNotSupportedException: Named maps
  are not supported."


Вопрос все еще актуален
Есть ли какие-то альтернативы? Как вы решаете проблему с обработкой больших объемов,
что бы они были доступны между двух и более сервисов?

Задача: 
есть данные примерно такого вида:
id price1 price1 (таких записей 1млн) которые необходимо обновлять, ну скажем раз
20 в секунду

UPDATE#1

Named maps - это функция, предоставляемая Windows. Как правило, отображаемые в память
файлы работают путем межпроцессного взаимодействия, отображая один и тот же файл в
несколько процессов, например, используя MemoryMappedFile.CreateFromFile. 

Если не использовать именование, то запись будет иметь такой вид:

string path = "/home/test/test";
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite,
FileShare.ReadWrite))
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(fs, null, fs.Length,
MemoryMappedFileAccess.ReadWrite, HandleInheritability.None, true))
using (MemoryMappedViewAccessor acc = mmf.CreateViewAccessor())

    


Ответы

Ответ 1



Именованные memory mapped файлы под Linux не поддерживаются. Альтернатива - готовые key-value storage. IMO, проще всего будет прикрутить Redis. Есть готовый образ на dockerhub + есть хороший .NET клиент от Stack Exchange

Комментариев нет:

Отправить комментарий