問題タブ [appdomain]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Type.IsSubclassOf が期待どおりに動作しない
アセンブリをロードし、アプリケーションが参照する別のアセンブリ A1 で定義されたクラス C1 のサブクラスである型を検索するアプリケーションがあります。C1 のサブクラスである A1 に型 T を定義しましたが、Assembly.Load(...) を使用して A1 をロードすると、TI のインスタンスで t.IsSubclassOf(typeof(C1)) を呼び出すと false になります。現在の appdomain にアセンブリ A1 の 2 つのインスタンスがあり、両方ではなく一方のインスタンスから型 C1 を取得すると t.IsSubclassOf(C1) が機能することに気付きました。私はこの動作をよく理解していません。誰か説明できますか? さらに、C1のサブタイプを探すためにA1または他のアセンブリをロードするかどうかにかかわらず、これが機能するようにアプリを修正するにはどうすればよいですか?
c# - Cross AppDomain 通信のパフォーマンス ペナルティの最小値はどれくらいですか?
同じマシン内の AppDomains 間で通信することによるパフォーマンスの低下を最小限に抑えようとしています。私のおもちゃの例では、クラス A は AppDomain 1 にロードされます。AppDomain 2 を作成し、そこにクラス 2 (クラス 2 は MarshalByRef から継承) のインスタンスをロードして、プロキシを取得します。次に、クラス 1 は、値を返さないプロキシのメソッドを繰り返し呼び出します。
次の結果が得られます。
- AppDomain なし、両方のクラスが同じ AppDomain にロードされ、最初のメソッドが 2 番目のメソッドを繰り返し呼び出します (メソッドにはパラメーターがありません): 2,400 万メソッド呼び出し/秒
- 上記の 2 つの AppDomain、メソッドにはパラメーターがないか、「ブリーディング」文字列パラメーター: 340.000 メソッド呼び出し/秒
- 上記の 2 つの AppDomains、1 つのシリアル化可能なパラメーター (2 つの文字列の配列): 64.000 メソッド呼び出し/秒
2 と 3 (シリアライゼーション) の間のパフォーマンスの低下は理解できますが、ケース 1 からケース 2 への移行でなぜ 100 倍も遅くなるのかがよくわかりません。私の理解では、プロキシが作成されると、ある AppDomain から別の AppDomain にデータがマーシャリングされないため、後続のすべてのメソッド呼び出しは非常に高速でなければなりません。AppDomains 間の通信が非常に遅い理由はありますか? 私は何か間違ったことをしていますか?
PS1。これに関する唯一のヒントは次のとおりです。「AppDomain の境界を超えるコストは恥ずかしい」私は彼が連載を指していると推測していました...
PS2。AppDomain または Proxy の作成時間はカウントしません (私のベンチマークは最初のメソッド呼び出しで開始されます)
PS3。WinXP SP3 マシンで .NET 3.5 を使用しています。.NET 4.0 Beta 1 も試してみましたが、大きな違いはありませんでした。
c# - 実行時にアセンブリの 2 つのバージョンをロードする
私は過去数週間にわたってこれをクラックしようとしてきましたが、まだ良い解決策を見つけていません。うまくいけば、ここで答えを得ることができます。
2 つのアセンブリ (ZA & ZB) があり、どちらも共通のプロジェクト/dll (ZC) を指していますが、バージョンが異なる可能性があります (つまり、同じ dll 名、同じ名前空間、一部のクラスが異なる場合があります)。各アセンブリは単独で機能しますが、実行時に一方が他方によってロードされると (たとえば、A が B をロードする)、それを機能させることができません。助けが要る。
セットアップは次のとおりです。
- ZA は ZC (共通) バージョン 1.1 に依存します。
- ZB は ZC バージョン 1.0 に依存します
ZA はロードする必要があり、実行時に ZB (ZC に依存) に何かをロードする必要があります。
ZA はマスター アプリです。そのディレクトリの下に、すべての ZB とその依存関係 (ZC) を配置したいbin
plugins ディレクトリがあります。plugins/plugin-ZB
これが私がこれまでに試したことです:
Assembly.Load()
同じバージョンの dll を使用 - 正常に動作しました。
Assembly.Load()
異なるバージョンの dll を使用すると、ZB が読み込まれますが、メソッドを実行すると、メソッドが見つからないという例外が発生します。
AppDomain.Load()
ファイルが見つからないというエラーが発生しました。デリゲートを使用してアセンブリを解決することさえしました。
ZC に関するいくつかの詳細: - 一部のメソッドは public static です (一部はそうではありません)。例Log.Log("hello");
- 一部は値を返す場合があります (プリミティブまたはオブジェクト)。- 一部のメソッドは非静的 (および戻り値) です。
ヘルプ?-ティア
c# - AppDomain.AssemblyResolve のハンドラーを設定する例外
新しい appdomain を作成し、assemblyResolve ハンドラーをセットアップすると、「アセンブリ [現在実行中のアセンブリ] が見つかりません」という例外が常に発生します。
何が得られますか?コードは以下です
例外は次のとおりです。
System.IO.FileNotFoundException: ファイルまたはアセンブリ 'appAdmin、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。ファイル名: 'appAdmin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' [中略]
c# - あるアプリドメインから別のアプリドメインに変数を渡す方法
文字列などの変数がある場合、その値を新しいアプリドメインに渡す方法を知りたいです。
ありがとう
c# - appdomain 間の値の受け渡し
次のコードがあります。
これにより、ada.myString が「機能する」ようになると思いました。メインアプリドメイン上ですが、そうではありません。MarshalByRefObject から継承することで、2 番目の appdomain で行われた変更は元の appdomain にも反映されると思いました (これは、メイン appdomain の実際のオブジェクトへの単なるプロキシになると思いました!)?
ありがとう
c# - AppDomain は Process for .NET コードと同等ですか?
メモリ リークがあり、実行時間の長いプロセス内でシングル スレッド アパートメント [STA] を使用する、不適切に作成されたサード パーティの COM コンポーネントを呼び出す必要があります。
別のプロセスがそれを実装するための良い方法であることを知っており、長時間実行されているプロセスから時々再起動できます。
代わりに AppDomain を使用できますか? 適切にマークされている場合、AppDomain スレッドは STA スレッドですか? COM オブジェクト用の独自のメモリはありますか? AppDomain をアンロードすることは、プロセスを強制終了することと同じですか?
c# - AppDomainsとライセンスファイル
ライセンスファイル(licx)が埋め込まれたサードパーティコンポーネントを使用するdllがあります。現在、複数のアプリドメインを使用して、Windowsサービスアプリケーションでdllを使用しようとしています。コードがコンパイルされます。しかし、実行すると、ランタイムライセンスが見つからないというエラーメッセージが表示されます。
誰かが私にこれを説明できますか?単一のドメインでdllを使用する場合は、正常に機能します。助けてください。
ありがとう。
.net - .NET: AppDomains を使用したイベントの発生と処理に関する問題
私の問題の基本的な要点は次のとおりです。
- 私のメイン Window クラスはクラス A をインスタンス化します。
- クラス A は、セカンダリ AppDomainでクラス B をインスタンス化します。
- クラス B がイベントを発生させ、クラス A がイベントを正常に処理します。
- クラス A は独自のイベントを発生させます。
問題:ステップ 4 で、クラス A が、クラス B のイベントをキャッチしたイベント ハンドラー メソッドから独自のイベントを発生させると、イベントが発生します。ただし、 Window クラスのサブスクライブ ハンドラーは呼び出されません。
スローされる例外はありません。セカンダリ AppDomain を削除すると、イベントは問題なく処理されます。
これが機能しない理由を誰かが知っていますか?コールバックを使用せずにこれを機能させる別の方法はありますか?
どちらかといえば、問題はステップ 4 ではなくステップ 3 で発生すると思います。
問題を説明するための実際のコード サンプルを次に示します。