Здравствуйте, igna, Вы писали:
TK>>Например, через файл. А так, все зависит от того, что за переменная, как должна быть организована работа с ней и т.п. I>То есть ничего проще file mapping или memory mapping нет?
Еще реестр советовали — если объем данных не велик то, это тоже не самый сложный способ.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, igna, Вы писали:
TK>>Например, через файл. А так, все зависит от того, что за переменная, как должна быть организована работа с ней и т.п.
I>То есть ничего проще file mapping или memory mapping нет?
"проще всего" (как следует из первоначального вопроса) — через самый обычный файл.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, igna, Вы писали:
I>>Как проще всего определить разделяемую между процессами переменную?
TK>Например, через файл.
Через файл — это уже не переменная. Переменная должна в адресном пространстве обоих процессов лежать.
Уважаемые господа, не изобретайте велосипедов, потому что они давно изобретены.
Есть два понятия — переменная (область памяти), разделяемая двумя или большим числом процессов )то есть лежащая в виртуальном адресном пространстве всех процессов) и передача данных между процессами.
Для первого существуют 2 способа — memory mapped файлы и разделяемая секция в DLL. Других способов Windows не имеет, а поэтому и ничего придумать вы тут не сможете.
Для второго способов много. Файлы, сокеты, пайпы... Но это есть просто передача копии, а не разделение одной и той же переменной.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Для второго способов много. Файлы, сокеты, пайпы... Но это есть просто передача копии, а не разделение одной и той же переменной.
А если использовать Registry, это передача копии или разделение одной и той же переменной?
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Для второго способов много. Файлы, сокеты, пайпы... Но это есть просто передача копии, а не разделение одной и той же переменной.
I>А если использовать Registry, это передача копии или разделение одной и той же переменной?
Это многократная передача копии с сохранением во внешнем хранилище (практически — в базе данных) . Так что самый эффективный способ при простых требованиях — это shared data segment, как справедливо указал Pavel Dvorkin.
Здравствуйте, igna, Вы писали:
I>Как проще всего определить разделяемую между процессами переменную?
Раньше я для таких задач использовал ремотинг с Ipc-каналом (там пайпы). Кода немного и получается вполне удобно. Опять же как-то правильнее выглядит, когда у тебя есть специальный singleton сервис, который отвечает за "междпроцессные" данные.
С регистром и проч. — возни не меньше, а бенефит в чем?
Вариант с сервисом и расширять будет легче, если вдруг потребуется другие данные передавать между процессами или данные с более сложной структурой (коллекции, деревья).
Здравствуйте, Pavel Dvorkin, Вы писали:
TK>>Еще реестр советовали — если объем данных не велик то, это тоже не самый сложный способ. PD>Еще можно установить MS-SQL сервер и передавать через него
Многие БД ориентированные приложения именно так и делают зачем изобретать велосипед если уже есть открытый connection к базе данных?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Через файл — это уже не переменная. Переменная должна в адресном пространстве обоих процессов лежать.
Переменные в C# лежат на стеке
А вот переменные данные, могут вообще существовать сами по себе и вообще без процесса. для того, что-бы разделять их между процессами доводить все до маразма совершенно не обявательно.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>С регистром и проч. — возни не меньше, а бенефит в чем?
Бенефит в простоте (Microsoft.Win32.Registry.SetValue()/GetValue()) и больше, наверное, ни в чем. Если только персистентность не требуется, или, например, доступ к переменной из не-дотнетовских процессов.