-PR-

締切り済みの質問

質問No.1423393
困ってます
困ってます
お気に入り投稿に追加する (0人が追加しました)
回答数3
閲覧数4816
VB.NETによるプロセス間通信
VB.NETにおいて、2つのプロセスを起動し、その間のデータの受け渡しを行いたいのですが、
ファイルでは速度が遅すぎて、別の手法を探しています。なるべく簡単で実装できる方法を知りたい
です。ちなみに受け渡すデータのサイズですが、数十バイト程度です。よろしくお願いいたします。
投稿日時 - 2005-06-01 20:09:54

回答 (3)

回答No.3
>度々の回答ありがとうございます。「プロセス間通信のほうが遅い」
>とのことですが、具体的な実例などありますでしょうか?

なぜ遅いか?考えればすぐわかると思いますが。
単純なものは”速い”、複雑なものは”遅い”です。

最初の回答で書いたurlの方法が.NETでのまっとうなプロセス間通信の方法だと思います。
が、通信を行う双方のアプリを不正なアクセスから保護するために、何層にも処理の階層(レイヤー)が分かれて、それぞれに手順が定められています。

そんな複雑なことをやるよりは、単純な処理であるファイルの方が速いのはすぐに理解できますよね。#2に書いたとおり、キャッシュに乗ったらほとんどオンメモリでの処理です。

というか、テンポラリ用に、明示的にメモリ上にファイルを作ることだって不可能ではありません。


>>というか、速度を求めるのに今のWindowsで.NETを選択してる時点で間違ってるような・・・

>また、VB.NETを使用している理由ですが、現在および将来
>において、入手が可能な開発環境であるということです。

うーん、なぜ処理速度をそこまで求めるのでしたらCやC++ではないのでしょうか?という意味だったんですけど。
開発環境の入手性でしたらVC++.NETなら変わりませんが。

今のWindowsでは、.NET Frameworkは階層的にWindowsAPIの上にのっているだけです。つまり、余分なオーバーヘッドたっぷりです。

ただし、次期OSでは階層が逆になるので.NETの方が速くなる可能性もありますが。

ちなみに、一番単純で速いプロセス間通信は、DLLを使った共有メモリだと思います。ただし、.NETを使うんでしたら実現できませんが。
http://www.cisnet.or.jp/home/tsuneoka/win32sub/3.html
投稿日時 - 2005-06-04 02:46:18
この回答を支持する
(現在0人が支持しています)
回答No.2
>この処理が数回なら全く問題ではないのです
が、数百回となると100ミリ秒でも問題となってきます。

うーん、単純に回数を掛けても意味が無いかと。
特にファイルなんて、OSによるキャッシュがバリバリ効きます。
ちゃんとした手順を踏んだプロセス間通信よりよっぽど速いと思います。

ところで排他や同期は考えないんですか?
プロセス間通信のオーバーヘッドよりこういうことのほうがよっぽど時間がかかることだと思うんですが。

というか、速度を求めるのに今のWindowsで.NETを選択してる時点で間違ってるような・・・
投稿日時 - 2005-06-03 02:16:15
この回答を支持する
(現在0人が支持しています)
補足
度々の回答ありがとうございます。「プロセス間通信のほうが遅い」
とのことですが、具体的な実例などありますでしょうか?「業務」
なので、抽象的な「遅いと思う」では納得させることができないので、
具体的な内容があれば、それが知りたいです。

また、VB.NETを使用している理由ですが、現在および将来
において、入手が可能な開発環境であるということです。
投稿日時 - 2005-06-03 21:37:54
回答No.1
数十倍とのデータを受け渡すのに、ファイルでは遅いってのが良くわかりませんが。FDか何かと勘違いしてませんか?

で、
.NET プロセス間通信
こんなキーワードで検索すれば、いろいろと出てきますが。
Googleの結果の2番目はこれ
http://www.microsoft.com/japan/msdn/thisweek/step7/remoting/server_01.aspx



あとは、.NETで準備してるような方法で満足できないんでしたら、
1.WindowsAPIを使ってファイルマッピングを使う
2.WM_COPYDATAを使って別プロセスのウィンドウにメッセージとして送る。
3.WindowsAPIを使ってパイプ
ですかね。


ですかね。
投稿日時 - 2005-06-02 00:00:44
この回答を支持する
(現在0人が支持しています)
補足
「遅い」というのが客観的な表現ではなかったため、誤解をされているようです。
簡単な実験プログラムで試験したところ、ファイルでデータの受け渡しを行うのに
かかる時間は約100ミリ秒でした。この処理が数回なら全く問題ではないのです
が、数百回となると100ミリ秒でも問題となってきます。最低でも5倍、できれ
ば10倍以上のスピードアップが必要なのです。また、Googleでの検索で出てくる
内容についても、具体的な実装には少々使えなさそうな感じがします。
投稿日時 - 2005-06-02 21:08:22
この質問は役に立ちましたか?
1人が「このQ&Aが役に立った」と投票しています
もっと聞いてみる

関連するQ&A

この他の関連するQ&Aをキーワードで探す

回答募集中

同じカテゴリの人気Q&Aランキング

カテゴリ
Visual Basic
-PR-
-PR-

特集

誰かに自慢したくなる生物学の問題集!

お城、ボート、ツリーハウス、ユニークな物件満載!

発見や気づきのある調査結果をお届け!

OKDreamsにあなたの「夢」を投稿して!
抽選で30組60名様に試写会ご招待!

このQ&Aの関連キーワード

同じカテゴリの人気Q&Aランキング

カテゴリ
Visual Basic
-PR-

ピックアップ

-PR-