• 締切済み

VB.NETによるプロセス間通信

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

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答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

参考URL:
http://www.cisnet.or.jp/home/tsuneoka/win32sub/3.html
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>この処理が数回なら全く問題ではないのです が、数百回となると100ミリ秒でも問題となってきます。 うーん、単純に回数を掛けても意味が無いかと。 特にファイルなんて、OSによるキャッシュがバリバリ効きます。 ちゃんとした手順を踏んだプロセス間通信よりよっぽど速いと思います。 ところで排他や同期は考えないんですか? プロセス間通信のオーバーヘッドよりこういうことのほうがよっぽど時間がかかることだと思うんですが。 というか、速度を求めるのに今のWindowsで.NETを選択してる時点で間違ってるような・・・

AGRESS
質問者

補足

度々の回答ありがとうございます。「プロセス間通信のほうが遅い」 とのことですが、具体的な実例などありますでしょうか?「業務」 なので、抽象的な「遅いと思う」では納得させることができないので、 具体的な内容があれば、それが知りたいです。 また、VB.NETを使用している理由ですが、現在および将来 において、入手が可能な開発環境であるということです。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答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を使ってパイプ ですかね。 ですかね。

AGRESS
質問者

補足

「遅い」というのが客観的な表現ではなかったため、誤解をされているようです。 簡単な実験プログラムで試験したところ、ファイルでデータの受け渡しを行うのに かかる時間は約100ミリ秒でした。この処理が数回なら全く問題ではないのです が、数百回となると100ミリ秒でも問題となってきます。最低でも5倍、できれ ば10倍以上のスピードアップが必要なのです。また、Googleでの検索で出てくる 内容についても、具体的な実装には少々使えなさそうな感じがします。

関連するQ&A

  • VB.NETでソケット通信を実装しようとしています。

    VB.NETでソケット通信を実装しようとしています。 実装しようとするのは送信側です。 カンマ区切りのパラメータを送り、 受信側から戻りパラメータとしてカンマ区切りのデータを受け取るものです。 以下を参考としているのですが、 特にパラメータの設定の部分 カンマ区切りのデータをどこで設定すべきかわからない状況です。 http://dobon.net/vb/dotnet/internet/downloadusesocket.html サンプルソース等でご指摘いただけるとうれしいです。 初心者です。申し訳ございません。 ご回答お願いします。

  • VB.NETでCreateProcess

    VB.NET(2003)で、別exeを起動し、終了まで待機するということをするために、 system.Diagnostics.Processクラスを使用していました。 しかし、実際に動かす環境がMetaFrameなのですが、 その環境では、このクラスは使用できないようで画面の起動すらできなくなります。 ですので、別の方法ということで、APIのCreateProcess、WaitForSingleObjectを使用するように変更したいのですが、 VB.NETでのサンプルが余り無いため、パラメータにどのように設定するかなどがよくわかりません。 API自体使ったことが無いので、根本的にわから無すぎるのです・・・ VB.NETでAPI利用サンプルが多く掲載されているサイト、 できれば、CreateProcess、WaitForSingleObjectを使用しているサンプルなどありましたら、ご教授願います。 よろしくお願いいたします。

  • VB.NETで起動させたExcelの多重起動を禁止させるには?

    VB.NETで起動させたExcelの多重起動を禁止させるには? [前提条件] VB.NETには、「Excelを起動させるボタン」と「Excelを終了させるボタン」があるとします。 「Excelを起動させるボタン」によって既存のExcelファイルを起動させ、 「Excelを終了させるボタン」によって起動中のExcelファイルを終了させたいと思います。 Excelを起動している最中は、VBとExcelとでデータの受け渡しをします。 [問題・課題] この方法ですと、「Excelを起動させるボタン」を押下するたびに、同じ既存のExcelファイルを多重起動されてしまいます。 ネット上にある参考文献を調べると、ひとつの関数(?)内で アプリケーション open ⇒ データの吸出し  ⇒ アプリケーション close となっていました。 [前提条件]で述べている使い方で、実現可能な方法があれば教えてください。 (参考になりそうなWebアドレスだけでも構いません) 以上、よろしくお願いします。

  • VB.Netでの暗号化通信

    VB.Netで本社<->支店間の売上データなどをやり取りするプログラムを思索中です。 ふと思ったのですが、IEなどを利用した場合はhttpsで暗号化してデータのやり取りができますが、VB.Netでローカルで普通に扱うランダムファイルなどをインターネット経由で送信する際、暗号化して通信することは可能なのでしょうか。 どこか参考になるサイトなどがあれば教えていただきたいと思います。

  • vb.netでEXCEL起動がうまくできないのですが原因は何が考えられ

    vb.netでEXCEL起動がうまくできないのですが原因は何が考えられるでしょうか? VB.NETでEXCELのファイルを作成し、その後、 System.Diagnostics.Process.Start("C:\Test.xls") でファイルを開こうとすると、Excelのタイトルバー、メニューバー、ステータスバーのみ表示 された状態で、内容が表示されません。(Windowsの背景が表示された状態) この状態でもファイルは正しく保存されています。 以前は開けていたようなのですが、最近は100%開けないようです。 これはメモリ不足が原因なのでしょうか? メモリは確か1G程度しかなかったと思います。 お願いいたします。 OS:WindowsXP SP3 VB:VB.Net2008 Excel:Excel2000

  • VB.NETで、20バイト程度のデータを5000件ぐらい一時データとして・・

    VB.NETで、10バイト程度のデータを5000件下手すればもっと?ぐらい一時データとして・・プログラムで使いたいんですが、今はファイルに保存して読み込みながらやってるんですが、処理速度が遅いので、配列にしようかなーと考えているのですが、データベースから読み込んでいるのでデータ数が不明なのです。 dim abc as(10000) as string とかやれば簡単なのですが、これだとメモリ使いすぎ?な気がして。 何かよい方法ないでしょうかー?

  • vb.netでのExcel表示

    お世話になります。 vs2005、vb.Netを使用し、webアプリを作成しています。 webserverにアップした複数シートのExcelファイル(.xls)を、 上下にフレーム分割されたフォームの下部に表示したいのですが、 なかなかうまくいきません。 まず、ExcelファイルのパスをJavaScriptにて下部フレームに表示するようにしました。 この方法で試したところ、対象のフレームにExcelファイルが展開され、シートの遷移等も実装できました。 ところが、その画面が表示中に別のExcelを起動すると、 別起動したExcelと、Excelファイルを表示してるアプリが混同してしまい、 正常に動作しなくなってしまいました。 (切り替えようとしても、アプリのExcelが優先されてしまう) プロセスを確認したところ、1つのexeしか確認できなかったため、 これも関係していると思うのですが・・・ あと、Excelファイルをhtmlにして表示する方法があると聞いたことがあるのですが、 こちらも、もしご存知の方がおりましたら、お教え願います。 抽象的な質問で申し訳ありませんが、ご教授お願いします。 また、参考になるようなサイト等ありましたら、合わせてお願いします。

  • VB.NETからエクセルを起動して、エクセルでVBを閉じたい。

    こんにちは。 先日、エクセルのフォームを最前面に配置したいという 質問をさせて頂いたものでございます。 それで、SetWindowPosのAPIで設定する方法を教えて頂いたのですが、 最前面にする事は出来たのですが、フォームを動かすと ブックはその一つ下に現れてしまい、 ブックを最背面に配置するなどを試みてみたのですが、 どうもうまく行かないので、 エクセルから直に立ち上げることが出来ないようにして VB.NETのフォームを作ってエクセルにデータを送ろうかと思いました。 それで、データを送る方法は何とかなりそうなのですが、 VB.NETのフォームからエクセルを起動して、 次にエクセルからそのフォームを出したり、隠したりしたいのですが、 その場合、VB.NETのフォームのなんと言うハンドルを取得すればよいでしょうか? IDにも色々あるようで、どれを使えばよいのか分からなくなってしまいました。 そのIDはVBのフォームを起動した時に、エクセルと共有するiniファイルなどに、書き込んでおこうかと思っています。 よろしくお願いいたします。m(__)m

  • VB2013で別のプロセスが使用中です。

    VB2013でデバックをすると 「操作を完了できませんでした。プロセスはファイルにアクセスできません。別のプロセスが使用中です。」 とメッセージがでます。 OKボタンを押して1度終了させ、再度デバッグを開始するとデバッグできます。 デバッグを終了させ、再度デバッグをするとメッセージがまた出ます。 またOKを押せばデバッグはできるのですが、結構煩わしいので何か対処する方法はないでしょうか? 以前は出てなかったのですが急に出るようになりました。 原因が何かわからないのでヒントでもあればと思い質問させてもらいました。

  • VB.netでグラフ表示にて

    vb.net2010にてタイマー機能を使い3分に一度DBからデータを読み込んで折れ線グラフを作画(pictureboxに)するプログラムを作成したのですが起動しっぱしで使用するとかなり動作が重くなり使えない状態です。 メモリーを解放するなどの解決方法はありますでしょうか。 環境windows 7 Intel(R) core(TM)i3-2120 CPU @ 3.3GHz 実装メモリ 4.0GB 開発環境:vb.net 2010 express

専門家に質問してみよう