0

Cとwin32を使用していた当時、私は多くのIPC技術を持っていたのを覚えています。これまでのところ、.NETでそれらのいずれにも遭遇したり、Cの外部でそれらを見たりしたことがないので、これらのプロセス間通信技術をどのように行うことができるかを尋ねると思いました。

  1. 共有/グローバルメモリ。信号なしで別のプロセスによって変更できるRAMを割り当てるだけです。

  2. ウィンドウメッセージ。SendMessageとWM_USER+Nを使用したことを覚えています。共有メモリに触れたときに別のアプリに伝え、ファイルや設定を変更するように依頼し、ときどき怠惰な気分になるため、キーストロークを入力してマクロとして機能するように他のアプリに伝えました。

  3. 動的データ交換。私は試しましたが、これを機能させることはできませんでした。私が覚えていることから(これは完全に間違っている可能性があることを警告します)、あなたは自分自身をグローバルメッセージまたはイベントに登録し、別のアプリ(通常はあなたのもの)がメッセージを送信し、2つほどのアプリが互いに通信し、メッセージを投稿し、統合することができますこのように2つのアプリ間。何がこれに取って代わったのか知りたいです。

私が知っている名前付きパイプもまだ使用され、見られています。そして、私は人々がIPCにソケットを推奨していることを覚えていますが、私はそれをするのが好きではありませんでした。

他に何が欠けていて、何がこのテクニックに取って代わりましたか?かっこいいグローバルミューテックスがあることは知っています。私はまだ2つのアプリ間でメッセージを送信するための最新の方法を探しています(ポイント2)。パイプにないFIFOキューがあるのではないかといつも思っていました。毎回メッセージを送信してグローバルメモリを割り当てる代わりに、データ(1kなど)をプッシュできることを除いて、Windowsメッセージと同様です。

-編集-バンプ。このスレッドは、現時点ではまだ私に関連しています。

4

2 に答える 2

3

.NET では、以下を使用できます。

  1. 名前付きパイプ
  2. メモリマップファイル
  3. WCF

共有/グローバル メモリは .NET では簡単に実現できません。GC によって移動されないようにするには、Win32 呼び出しに相互運用し、マネージ メモリをピン留めする必要があります。

ウィンドウメッセージは明らかに、ウィンドウが表示されているか非表示になっている場合にのみ機能します。この手法は、.NET アプリケーションでは使用しないでください。

DDE - 使用しないでください。

于 2009-12-14T22:46:35.417 に答える
1

ソケットについては知っていてもあまり好きではありませんが、Windows ではローカルホスト経由のソケットにはショートカット パスがあり、単一のメモリ コピーのレベルに最適化されている可能性があることをどこかで読んだことを思い出します。しかし、私の人生では、それを読んだ場所を見つけることができないので、他の誰かがソースにリンクできるかもしれません.

これの欠点は、接続を確立するためにアクティブなネットワーク コードが必要であると私は信じていますが、一度確立すると実際には TCP/IP スタック全体を使用するわけではありません。

また、Andrei による投稿のメモとして、Memory Mapped Files (メモリが機能する場合にのみネイティブが .net 4.0 に追加される) をテストしましたが、問題が発生していました。動作する可能性は高いですが、ドキュメントはあまりなく、2 つのアプリケーションが読み取りと書き込みを同期する方法を書き出す必要があります。通知用のセマフォであろうと、ファイル内の場所を調べるタイトなループであろうと、 .

個人的には、私が開発している APP では、ローカルホストを介してソケットを使用していますが、これまでのところ、パフォーマンスやセキュリティの問題に大きな問題は発生していません。しかし、それは設計目標とセキュリティ要件に戻ります。

于 2009-12-14T23:10:57.487 に答える