- - PR -
[C#] AppDomain 及びプロセスについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 | ||||||||
|
投稿日時: 2006-04-05 07:21
C は EXE である必要はなく、DLL のアセンブリとしてロードすれば良いと思いますが、 A と B から共通にしたいということは、C 内の資源を単一にしたいということですね。 どんなデータをやり取りするか存じませんが、C を介すこと自体は良いとして、 リソース自体は外部 (DB など) の方が良くないでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-04-05 11:18
レスありがとうございます。 仰るとおり、2つのEXEでリソースの共有というのが一番の目的です。 具体的にはリソースは画像データ等ですね。 で、このリソースへのアクセスがかなり頻繁に発生するので PCをまたいでのやりとり(リモート通信?)は負荷がきついかと思い 同じPC内でということで考えています。 ちなみに、追加質問ですが CをEXEではなくDLLとした場合、後から起動したAorBのEXEは Cが既に存在するかどうかを調べることってできるんでしょうか? よろしくお願いします。 | ||||||||
|
投稿日時: 2006-04-05 12:10
DB というのはたとえであってリモートとは述べていませんよ。 頻繁に発生するのであれば、キャッシュのような仕組みを作るべきであり、 "そのために" C が必要である、という理由にはならないと思います。
依存関係があるわけですから存在するでしょう。 A の中に存在しているかどうかは A が起動されていれば存在することになります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-04-05 12:36
なるほど、なるほど・・・確かにそうですね。 高速化の仕組みはまた別問題で考えないといかんとこですね。
実際あるかどうかはわからないんですが、この共有リソースを使うアプリが さらに増える可能性もありましてですね。 その場合、どれかが起動しているかチェックをかけるよりも Cが存在してるかのチェックができたほうがいいかなと思い そしたらCもEXEになるかなと思ったんですが・・・ で、大元の質問に戻りますが(笑) プロセスをそれぞれ分けるか、1プロセス内で それぞれの AppDomain を作成するのかってのは いかがなもんでしょうか? | ||||||||
|
投稿日時: 2006-04-05 13:08
いずれかが起動したら、残りを AppDomain から作成してロードするということですか? リモートの話が出てましたけど、AppDomain 間のやりとりも結構コストが高いハズですが。 それも頻繁にあるんでしたっけ? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-04-05 13:59
そこもコスト高いですか〜 基本的にはAとBのやりとりはないです。 AとCまたはBとCのやりとりで、片方が共有リソースを更新したら もう片方にも通知が行くような仕組みでいきたいと考えています。 このやりとりは頻繁にあります。 あと、AB共に単体でも動作させたいので Aが起動したときに自動でBも起動とは考えていません。 なので、例えばAを起動して、その時に AppDomain を作成して Cを起動(生成?)します。 この時点でAとCは同じプロセスに含まれます・・・よね? その後で、Bを起動させたら(プログラム内からでなく普通にエクスプローラ等から) Bは別プロセスで起動すると思うんですが AとCが含まれるプロセスにBも含んで、1プロセス3AppDomain みたいなことはできるのかな? という辺りで悩んでいます。 すいません・・・説明下手で。 よろしくお願いします。 | ||||||||
|
投稿日時: 2006-04-05 14:39
個々に起動して後付するようなイメージであれば、セキュリティの問題で無理でしょうね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |