Как разделить память байтового массива между процессами C # и Python - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть приложение на C #, которое будет постоянно выделять память для данных, хранящихся в байтовых массивах. У меня есть еще один процесс, написанный на Python, который будет читать из этих массивов после создания экземпляра. Оба процесса будут работать на компьютере с Ubuntu.

Очевидно, что очевидным решением является разделение памяти между процессами путем передачи указателя из процесса C # в процесс python. Однако это оказалось трудным.

Я в основном смотрел на решения, предлагаемые онлайн. Двумя известными являются именованные каналы и отображенные файлы памяти. Я прочитал следующие сообщения:

Совместное использование памяти между C и Python. Рекомендуется выполнять через именованные каналы: Совместно использовать память между C / C ++ и Python

Приложение C # не будет ни читать, ни записывать из массива, а скрипт python будет только читать из массива. Поэтому это решение не удовлетворяет моим требованиям к эффективности и представляется излишним решением, когда данные буквально хранятся в памяти.

Когда я смотрел на файлы, отображенные в памяти, казалось, что мы будем выделятьпамять для этих файлов памяти для записи данных. Однако данные уже будут распределены до использования сопоставленного файла. Таким образом, это также кажется неэффективным.

Второй пост: https://docs.microsoft.com/en-us/dotnet/standard/io/memory-mapped-files?redirectedfrom=MSDN

В статье говорится: «Начиная с .NET Framework 4, вы можете использовать управляемый код для доступа к отображенной памятифайлы так же, как нативные функции Windows обращаются к отображенным в памяти файлам ". Будет ли машина с Ubuntu сталкиваться с потенциальными проблемами при чтении этих файлов так же, как Windows? И если нет, то может ли кто-нибудь привести простой пример использования этих сопоставленных файлов между упомянутыми выше языками программ, а также передать ссылку на эти сопоставленные файлы между процессами или дать ссылку на то, где кто-то уже это сделал?

Или, если кто-то знает, как напрямую передать указатель на массив байтов из C # в python, это было бы даже лучше, если это возможно.

Любая помощь очень ценится!

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