#c# #c #wpf
#c# #c #wpf
Вопрос:
У меня есть данные, находящиеся в буфере, выделенном в приложении A с использованием AllocHGlobal. Я хочу использовать этот буфер в приложении B, т.е. передавать ссылку между двумя приложениями Windows 7 или между приложением и службой.
Можно ли это сделать без копирования буфера один или несколько раз?
Спасибо.
Комментарии:
1. Обычно вы используете класс stream для подключения разных приложений. Одним из способов достижения этой цели является использование стандартного ввода и стандартного вывода.
2. Что-то вроде этого? . Вы спрашиваете, как реализовать выбранное вами решение для неустановленной проблемы; если вы разделяете реальную цель, может быть лучший ответ.
3. Память защищена, поэтому другое приложение не может использовать память, выделенную приложением.
4. @jdweng спасибо, но для этого потребовалась бы фактическая копия данных через поток, не так ли?
5. @ed извините, если я не был ясен, но я думал, что передача ссылки на другой процесс была ясна. Я стараюсь задавать вопросы коротко и по существу. Однако, допустим, у меня есть буфер размером 10 МБ, выделенный с помощью AllocHGlobal в процессе A. Я хочу получить доступ к этому буферу в процессе B, но я не хочу копировать этот буфер, я просто хочу получить ссылку на этот буфер.
Ответ №1:
Хотя вы не можете напрямую совместно использовать память из своего пространства процессов, вы могли бы достичь чего-то подобного с помощью файлов, отображаемых в непостоянной памяти
Комментарии:
1. Спасибо, я ценю ваш ответ, который подтверждает мои подозрения. Данные действительно передаются в одну сторону, и использование MMF в качестве буферов данных в приложении A непрактично для работы, которую оно должно выполнять. Таким образом, одна копия в MMF должна быть допущена. Я подозреваю, что это быстрее, чем сериализация или передача данных по каналу или потоку. Вероятно, стоит поэкспериментировать с этим.