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

このQ&Aに関連する最新のQ&A

A 回答 (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 …

参考URL:http://www.cisnet.or.jp/home/tsuneoka/win32sub/3 …
    • good
    • 0

>この処理が数回なら全く問題ではないのです


が、数百回となると100ミリ秒でも問題となってきます。

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

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

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

この回答への補足

度々の回答ありがとうございます。「プロセス間通信のほうが遅い」
とのことですが、具体的な実例などありますでしょうか?「業務」
なので、抽象的な「遅いと思う」では納得させることができないので、
具体的な内容があれば、それが知りたいです。

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

補足日時:2005/06/03 21:37
    • good
    • 0

数十倍とのデータを受け渡すのに、ファイルでは遅いってのが良くわかりませんが。

FDか何かと勘違いしてませんか?

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



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


ですかね。

この回答への補足

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

補足日時:2005/06/02 21:08
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVisualStudio.netのASP.NET WebアプリケーションでExcelデータを読み出す

VisualStudio.netで、Excelファイルからデータを取り出し、
IISサーバに載せて、インターネットで見られるようにするプログラムを
勉強しています。

参考書を参考にして、
VisualStudio.netのWindowsアプリケーションで
Excelファイルからデータを呼び出して表示するプログラムを
作ったところ、うまくいきました。
それを、ASP.NET Webアプリケーションでやったところ、
エラーメッセージが出て、ブラウザ上で成功しません。

エラーメッセージは、
「アプリケーションでサーバー エラーが発生しました。
ActiveX コンポーネントを作成できません。」
ということで、
ソースエラーでは
「行 49: myXls = CreateObject("Excel.Application")」
がエラーの原因のようです。

これは、VisualStudio.netの開発状況の設定の問題でしょうか?
あるいはサーバの設定の問題でしょうか?
それともプログラム自体の間違いでしょうか?

初歩的な質問で恐縮ですが、一人ではなかなか解決しないので
どうぞよろしくお願いいたします。

VisualStudio.netで、Excelファイルからデータを取り出し、
IISサーバに載せて、インターネットで見られるようにするプログラムを
勉強しています。

参考書を参考にして、
VisualStudio.netのWindowsアプリケーションで
Excelファイルからデータを呼び出して表示するプログラムを
作ったところ、うまくいきました。
それを、ASP.NET Webアプリケーションでやったところ、
エラーメッセージが出て、ブラウザ上で成功しません。

エラーメッセージは、
「アプリケーションでサーバー エラーが発生しま...続きを読む

Aベストアンサー

>あるいはサーバの設定の問題でしょうか?

はい、権限の問題でしょう。

>それともプログラム自体の間違いでしょうか?

推奨された手法ではありませんね。

>一人ではなかなか解決しないので

それは言い訳で、googleで検索すれば解決するでしょう。

http://www.users.gr.jp/ml/archive/aspx/429.asp
http://support.microsoft.com/default.aspx?scid=kb;ja;JP257757
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q278973

QVBAクラスで、プロパティを使わずに、データを受け渡すには?

はじめまして。

最近、クラスモジュールを使い始めたのですが、
別のクラスに、プロパティを使わずに、
データを受け渡すには、どうすればいいのでしょうか?

たとえば、次の2つのクラスがあったとします。
(両方ともString型の読み取り専用のプロパティがある)

'クラスA
Private m_Str_A as string
Public Property Get Str_A() as String
Str_A = m_Str_A
End Property

'クラスB
Private m_Str_B as string
Public Property Get Str_B() as String
Str_B = m_Str_B
End Property

ここで、クラスAで使用したm_Str_Aのデータを
クラスBのm_Str_Bへ渡したいのですが、、、、。
別のプロパティを作ればいいだろうと考えたのですが、
それでは、値の変更が可能になってしまいます。

使用環境は、Excel2000 VBA、Windows2000です。
いろいろ調べてみたところ、他の言語か、VB.NETでない
と無理そうなことが書かれていました。
仕事場では、他の言語は使用できないので、困ってます。
何か良い方法がありましたら、よろしくおねがいします。

はじめまして。

最近、クラスモジュールを使い始めたのですが、
別のクラスに、プロパティを使わずに、
データを受け渡すには、どうすればいいのでしょうか?

たとえば、次の2つのクラスがあったとします。
(両方ともString型の読み取り専用のプロパティがある)

'クラスA
Private m_Str_A as string
Public Property Get Str_A() as String
Str_A = m_Str_A
End Property

'クラスB
Private m_Str_B as string
Public Property Get Str_B() as String
Str_B = m_Str_B
End Prope...続きを読む

Aベストアンサー

こんばんは。Wendy02です。

>実は,クラスAの下にクラスBを置きたいと考えてます。

それは、サブクラスかな?サブクラスは、VBAではないと思いますね。というか、あまりそういうケースにめぐり合いませんね。

>クラスBのプロパティの値の変更を不可にしたいのです。

発想を変えたほうがよいのではありませんか?具体的に、どういうものに使うか分れば、まったく話が変わるかもしれませんが。

Excelの中には、読み取り専用のプロパティに近いものがありますね。例えば、Now関数が、似ています。Dateは、値の代入が入れられるのに、Nowは、出来ません。あたりまえのようでいて、へんです。では、Now関数もDate関数も、値を入れていないか、というかというと、そうではありません。両方とも既に入っていて、そのような違いが起こります。

では、クラスでそれができるかというと、それはVBAでは無理ですね。VBAのクラスは、あくまでも、インスタンスを作るための雛型のようなもので、出口だけあって、入り口のないものは、定数以外は、空のままです。

VBAで、一旦、代入された値を変更されないようにするためには、クラスでは扱いません。代入値を、一度入れたきりにするには(Excelの起動から終了までの期間の間)、やはり、変数で、新たな代入を阻止するように、一般プロシージャやユーザー定義関数で作るしかないかと思うのです。

こんばんは。Wendy02です。

>実は,クラスAの下にクラスBを置きたいと考えてます。

それは、サブクラスかな?サブクラスは、VBAではないと思いますね。というか、あまりそういうケースにめぐり合いませんね。

>クラスBのプロパティの値の変更を不可にしたいのです。

発想を変えたほうがよいのではありませんか?具体的に、どういうものに使うか分れば、まったく話が変わるかもしれませんが。

Excelの中には、読み取り専用のプロパティに近いものがありますね。例えば、Now関数が、似ています。Da...続きを読む

Q.NETでプロセスの一覧を取得

現在実行されてるプロセスの一覧を取得したいのですがどのようにすればよいでしょうか?

また、ほかのWin32APIの機能を.NETで利用するための関数をまとめてあるようなものは無いでしょうか?

Aベストアンサー

>現在実行されてるプロセスの一覧を取得したいのですが
>どのようにすればよいでしょうか?

System.Diagnostics.Process.GetProcesses
を使用する。


>また、ほかのWin32APIの機能を.NETで利用するための
>関数をまとめてあるようなものは無いでしょうか?

Win32APIと.NET Framework APIの対応表
http://www.microsoft.com/japan/msdn/net/general/win32map.asp

参考URL:http://www.microsoft.com/japan/msdn/net/general/win32map.asp

QVB.NET 自プログラムのプロセス終了のイベント

こんにちは

自プログラム(画面)のプロセスの終了時に、そのイベントを
自プログラムでキャッチするにはどうしたらよういのでしょうか?

Aベストアンサー

> プロセスを強制終了した場合もイベントは拾う事ができるのでしょうか?

プロセスの強制終了は、正常にアプリケーションを終了したわけではないので、
走行しませんし、そのような状態を捕捉するイベントもありません。
.NET Framework(CLR)のエラーが発生して異常終了したからといって、後続の処理が
走行しないのと一緒です。

Qデータ 受け渡し

サーバに主なプログラムを作り、クライアント同士が対戦するゲームを作ろうと考えているのですが、サーバとクライアントのデータの受け渡しはどうすればいいのでしょうか?
例えばビンゴゲームならサーバ側のプログラムで、クライアントの画面の数字をだすなどです。
どのようにデータを受け渡すかがわかりませんのでお願いします。

Aベストアンサー

サーバーとはどのようなサーバーを言うのでしょうか。
共有ホルダーにファイルを各々管理するだけのPCですらサーバーと呼んだりする企業もあるので私は各社の方言と認識しています。
実際には詳細を確認すると、椅子ごとひっくり返るような「サーバー」と呼ばれるものも有ったりするもので...

逆に上記のような場合なら、サーバー?に実行ファイルを置いて
クライアント同士でデータをやり取りするという事もできるのではないでしょうか。


このQ&Aを見た人がよく見るQ&A

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

おすすめ情報