2015-08-12 13 views
0

У меня есть довольно большие коллекции экземпляров объектов (> 100 Мб), которые мне нужно разделить между двумя процессами на одной машине. Есть ли способ поделиться такими коллекциями без необходимости сериализации/десериализации?Могу ли я делиться экземплярами классов между двумя процессами на одном компьютере без необходимости сериализации/десериализации?

Я рассматривал шину сообщений, но тогда мне нужно было бы сериализовать/десериализовать экземпляры объектов, а это не-go, потому что накладные расходы слишком трудоемки. Кроме того, файлы с отображением памяти, похоже, связаны с сериализацией экземпляров объектов в файлах.

Я нацелен на C# /. Net 4.5 на ОС Windows 7.

Спасибо

+0

Вы когда-нибудь думали использовать базу данных? –

+0

@ Владымир Мезенцев, БД будет слишком медленным, и данные не будут повторно использоваться. –

ответ

1

Вы не можете разделить живой объект между процессами.

Вы не можете заставить .NET сохранять объект в памяти, имеющей карту памяти, и/или присоединять объект к «данным», присутствующим в области памяти, отображаемой в памяти.

Когда-то было .NET Remoting для связи между процессами ... Это был очень низкий уровень ... он по-прежнему присутствует, но устарел. Благодаря использованию внутренней черной магии иногда (см. https://stackoverflow.com/a/7553467/613130) вместо сериализации/десериализации объектов он может создать «прокси» с одной стороны для доступа к данным с другой стороны. Обратите внимание, что это явно медленно. Ах ... и проксированные объекты на самом деле не являются «локальными» ... Я думаю, что не-владелец должен сделать вызов владельцу объектов («сервер»), чтобы сделать любую операцию над прокси-объектами. Таким образом, они «разделены», как будто вы делитесь файлом на своем HD: «клиентские» компьютеры могут его прочитать, но чтобы прочитать его, «сервер» должен прочитать его и отправить прочитанные данные «клиенту».

+0

Что значит «живой объект»? –

+0

@MattWolf «Настоящий» .net объект, а не «сериализованный объект» ... Вы можете легко разделить сериализованный объект: вы помещаете его (сериализованные данные, которые я имею в виду) в файл с отображением памяти, и несколько процессов могут его прочитать. – xanatos

+0

Мне это известно, но мне интересно, могут ли Pipes или любая другая технология делиться неэтериализованными объектами –

 Смежные вопросы

  • Нет связанных вопросов^_^