- PR -

[C#] AppDomain 及びプロセスについて

投稿者投稿内容
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2006-04-04 22:52
お世話になります。
C#の AppDomain 及びプロセスについての質問です。

やろうとしていることは
A、B、Cと3つの EXE があるとして
AとBは普通のGUIアプリです。
で、Cはリソース等を一元管理するためのコアのような役割のアプリです。

AとBはどっちが先に起動されるかは決まってるわけでなく
先に起動した方が、Cも起動させて
後から起動した方は、Cを見つけて連結し
A、B共にリソースのやり取りはCを介してというような
システムを考えています。

こういう場合、それぞれのアプリはプロセスを分けて
プロセス間通信という風になるのか、一つのプロセスで
AppDomain を3つ作ればいけるのかという辺りで悩んでいます。
また、仮に後者が可能だとして、後から起動した方は
先に起動した方のプロセスに連結(内包?)できるのかという問題もあります。

プロセスやスレッド周りはまだまだ初心者ですので
根本的に勘違いしてるのかもしれませんが
ご教授よろしくお願いします。

[開発環境]
WindowsXP
Visual Studio .NET2005



じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-05 07:21
引用:

まかろにさんの書き込み (2006-04-04 22:52) より:

後から起動した方は、Cを見つけて連結し
A、B共にリソースのやり取りはCを介してというようなシステムを考えています。


C は EXE である必要はなく、DLL のアセンブリとしてロードすれば良いと思いますが、
A と B から共通にしたいということは、C 内の資源を単一にしたいということですね。

どんなデータをやり取りするか存じませんが、C を介すこと自体は良いとして、
リソース自体は外部 (DB など) の方が良くないでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2006-04-05 11:18
引用:

じゃんぬねっとさんの書き込み (2006-04-05 07:21) より:

C は EXE である必要はなく、DLL のアセンブリとしてロードすれば良いと思いますが、
A と B から共通にしたいということは、C 内の資源を単一にしたいということですね。

どんなデータをやり取りするか存じませんが、C を介すこと自体は良いとして、
リソース自体は外部 (DB など) の方が良くないでしょうか?





レスありがとうございます。

仰るとおり、2つのEXEでリソースの共有というのが一番の目的です。
具体的にはリソースは画像データ等ですね。

で、このリソースへのアクセスがかなり頻繁に発生するので
PCをまたいでのやりとり(リモート通信?)は負荷がきついかと思い
同じPC内でということで考えています。

ちなみに、追加質問ですが
CをEXEではなくDLLとした場合、後から起動したAorBのEXEは
Cが既に存在するかどうかを調べることってできるんでしょうか?

よろしくお願いします。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-05 12:10
引用:

まかろにさんの書き込み (2006-04-05 11:18) より:

で、このリソースへのアクセスがかなり頻繁に発生するので
PCをまたいでのやりとり(リモート通信?)は負荷がきついかと思い
同じPC内でということで考えています。


DB というのはたとえであってリモートとは述べていませんよ。
頻繁に発生するのであれば、キャッシュのような仕組みを作るべきであり、
"そのために" C が必要である、という理由にはならないと思います。

引用:

CをEXEではなくDLLとした場合、後から起動したAorBのEXEは
Cが既に存在するかどうかを調べることってできるんでしょうか?


依存関係があるわけですから存在するでしょう。
A の中に存在しているかどうかは A が起動されていれば存在することになります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2006-04-05 12:36
引用:

じゃんぬねっとさんの書き込み (2006-04-05 12:10) より:

DB というのはたとえであってリモートとは述べていませんよ。
頻繁に発生するのであれば、キャッシュのような仕組みを作るべきであり、
"そのために" C が必要である、という理由にはならないと思います。




なるほど、なるほど・・・確かにそうですね。
高速化の仕組みはまた別問題で考えないといかんとこですね。

引用:


依存関係があるわけですから存在するでしょう。
A の中に存在しているかどうかは A が起動されていれば存在することになります。




実際あるかどうかはわからないんですが、この共有リソースを使うアプリが
さらに増える可能性もありましてですね。
その場合、どれかが起動しているかチェックをかけるよりも
Cが存在してるかのチェックができたほうがいいかなと思い
そしたらCもEXEになるかなと思ったんですが・・・

で、大元の質問に戻りますが(笑)
プロセスをそれぞれ分けるか、1プロセス内で
それぞれの AppDomain を作成するのかってのは
いかがなもんでしょうか?

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-05 13:08
引用:

まかろにさんの書き込み (2006-04-05 12:36) より:

それぞれの AppDomain を作成するのかってのは
いかがなもんでしょうか?


いずれかが起動したら、残りを AppDomain から作成してロードするということですか?
リモートの話が出てましたけど、AppDomain 間のやりとりも結構コストが高いハズですが。
それも頻繁にあるんでしたっけ?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2006-04-05 13:59
引用:

じゃんぬねっとさんの書き込み (2006-04-05 13:08) より:

いずれかが起動したら、残りを AppDomain から作成してロードするということですか?
リモートの話が出てましたけど、AppDomain 間のやりとりも結構コストが高いハズですが。
それも頻繁にあるんでしたっけ?





そこもコスト高いですか〜
基本的にはAとBのやりとりはないです。
AとCまたはBとCのやりとりで、片方が共有リソースを更新したら
もう片方にも通知が行くような仕組みでいきたいと考えています。
このやりとりは頻繁にあります。

あと、AB共に単体でも動作させたいので
Aが起動したときに自動でBも起動とは考えていません。
なので、例えばAを起動して、その時に AppDomain を作成して
Cを起動(生成?)します。
この時点でAとCは同じプロセスに含まれます・・・よね?
その後で、Bを起動させたら(プログラム内からでなく普通にエクスプローラ等から)
Bは別プロセスで起動すると思うんですが
AとCが含まれるプロセスにBも含んで、1プロセス3AppDomain
みたいなことはできるのかな? という辺りで悩んでいます。

すいません・・・説明下手で。
よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-05 14:39
引用:

まかろにさんの書き込み (2006-04-05 13:59) より:

AとCが含まれるプロセスにBも含んで、1プロセス3AppDomain
みたいなことはできるのかな? という辺りで悩んでいます。


個々に起動して後付するようなイメージであれば、セキュリティの問題で無理でしょうね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)