-PR-
AGRESS

VB.NETにおいて、2つのプロセスを起動し、その間のデータの受け渡しを行いたいのですが、
ファイルでは速度が遅すぎて、別の手法を探しています。なるべく簡単で実装できる方法を知りたい
です。ちなみに受け渡すデータのサイズですが、数十バイト程度です。よろしくお願いいたします。
  • 回答数3
  • 気になる数0
  • Aみんなの回答(全3件)

    回答 (全3件)

    • 2005-06-02 00:00:44
    • 回答No.1
    数十倍とのデータを受け渡すのに、ファイルでは遅いってのが良くわかりませんが。FDか何かと勘違いしてませんか? で、 .NET プロセス間通信 こんなキーワードで検索すれば、いろいろと出てきますが。 Googleの結果の2番目はこれ http://www.microsoft.com/japan/msdn/thisweek/step7/remoting/server_01.aspx ...続きを読む
    数十倍とのデータを受け渡すのに、ファイルでは遅いってのが良くわかりませんが。FDか何かと勘違いしてませんか?

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



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


    ですかね。
    補足コメント
    「遅い」というのが客観的な表現ではなかったため、誤解をされているようです。
    簡単な実験プログラムで試験したところ、ファイルでデータの受け渡しを行うのに
    かかる時間は約100ミリ秒でした。この処理が数回なら全く問題ではないのです
    が、数百回となると100ミリ秒でも問題となってきます。最低でも5倍、できれ
    ば10倍以上のスピードアップが必要なのです。また、Googleでの検索で出てくる
    内容についても、具体的な実装には少々使えなさそうな感じがします。
    投稿日時 - 2005-06-02 21:08:22
    • ありがとう数0
    • 2005-06-03 02:16:15
    • 回答No.2
    >この処理が数回なら全く問題ではないのです が、数百回となると100ミリ秒でも問題となってきます。 うーん、単純に回数を掛けても意味が無いかと。 特にファイルなんて、OSによるキャッシュがバリバリ効きます。 ちゃんとした手順を踏んだプロセス間通信よりよっぽど速いと思います。 ところで排他や同期は考えないんですか? プロセス間通信のオーバーヘッドよりこういうことのほうがよっぽど時間 ...続きを読む
    >この処理が数回なら全く問題ではないのです
    が、数百回となると100ミリ秒でも問題となってきます。

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

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

    というか、速度を求めるのに今のWindowsで.NETを選択してる時点で間違ってるような・・・
    補足コメント
    度々の回答ありがとうございます。「プロセス間通信のほうが遅い」
    とのことですが、具体的な実例などありますでしょうか?「業務」
    なので、抽象的な「遅いと思う」では納得させることができないので、
    具体的な内容があれば、それが知りたいです。

    また、VB.NETを使用している理由ですが、現在および将来
    において、入手が可能な開発環境であるということです。
    投稿日時 - 2005-06-03 21:37:54
    • ありがとう数0
    • 2005-06-04 02:46:18
    • 回答No.3
    >度々の回答ありがとうございます。「プロセス間通信のほうが遅い」 >とのことですが、具体的な実例などありますでしょうか? なぜ遅いか?考えればすぐわかると思いますが。 単純なものは”速い”、複雑なものは”遅い”です。 最初の回答で書いたurlの方法が.NETでのまっとうなプロセス間通信の方法だと思います。 が、通信を行う双方のアプリを不正なアクセスから保護するために、何層にも ...続きを読む
    >度々の回答ありがとうございます。「プロセス間通信のほうが遅い」
    >とのことですが、具体的な実例などありますでしょうか?

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

    最初の回答で書いた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
    • ありがとう数0
    • 回答数3
    • 気になる数0
    • ありがとう数1
    • ありがとう
    • なるほど、役に立ったなど
      感じた思いを「ありがとう」で
      伝えてください
    • 質問する
    • 知りたいこと、悩んでいることを
      投稿してみましょう
    こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
    このQ&Aにはまだコメントがありません。
    あなたの思ったこと、知っていることをここにコメントしてみましょう。

    関連するQ&A

    -PR-
    -PR-

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

    別のキーワードで再検索する
    -PR-
    -PR-
    -PR-

    特集


    成功のポイントとは?M&Aで経営の不安を解決!

    -PR-

    ピックアップ

    -PR-
    ページ先頭へ