問題タブ [applicationdomain]
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.
apache-flex - 同じ ApplicationDomain 内で実行時に Flash SWF にロードされる Flex SWF アセット
Flex SDK によってコンパイルされた swf を Flash IDE によってエクスポートされた swf にロードし、getDefinition() によってアセットをインスタンス化しようとしています。通常、これは Flash IDE からエクスポートされたアセットで正常に機能し、Flash IDE から別の swf にロードされます。
これは通常、Flash IDE のみを使用してこれを行う方法です:
ローダー - > 同じ ApplicationDomain を使用 - > getDefinition(class)
ここで、[Embed] メタデータ タグを使用して Flex SDK からコンパイルされた「Test .as」を使用します:
Loader - > 同じ ApplicationDomain を使用 - > getDefinition(" Test _" + class)
問題は、取得したいクラス名の前にロードされたアセット ライブラリを追跡する必要がないことです ((' Test _" + class) vs (class))。これを行う方法はありますか?クラスがプルされているライブラリを参照せずに、または元のローダーにアクセスせずに? この方法では、現在の ApplicaitonDomain からインスタンス化できるクラス名だけで、アセットがどの SWF から来ているかを知る必要はありません。
ありがとう
apache-flex - module2 のクラスと同じ名前の module1 のクラスをロードする
必要に応じてモジュールをロードできる Flex アプリケーションがあります。最初のモジュールがロードされると、背景を赤く塗るクラス MyBackground() が作成されます。2 番目のモジュールをロードする (そして最初のモジュールをアンロードする) ことを選択すると、(2 番目のモジュールから) クラス MyBackground を再度ロードします。ただし、MyBackground のコンストラクターにステップ インすると、UIComponentDescriptor のコンストラクターに直接移動します。
これは、ロードする各モジュールに同じアプリケーション ドメインを使用することと関係がありますか? Flex はクラス タイプを親アプリケーションにロードしてキャッシュするので、2 回目にクラスを要求すると、クラスが同じかどうかを実際に確認せずに検索を行うだけですか?
これに関する情報は大歓迎です。
.net - .NETアプリケーションドメインとは何ですか?
アプリケーションドメイン(AppDomain)とは正確には何ですか?プロセスやスレッドとはどのように異なりますか?
c# - AppDomain.Unload を呼び出してもガベージ コレクションが発生しないのはなぜですか?
AppDomain.Unload(myDomain) を実行すると、完全なガベージ コレクションも実行されると予想されます。
「C# による CLR」の Jeffrey Richter によると、彼は AppDomain.Unload 中に次のように述べています。
CLR はガベージ コレクションを強制的に発生させ、現在アンロードされている AppDomain によって作成されたオブジェクトによって使用されていたメモリを再利用します。これらのオブジェクトの Finalize メソッドが呼び出され、オブジェクトが適切にクリーンアップされる機会が与えられます。
「.NET Framework 共通言語ランタイムのカスタマイズ」の「Steven Pratschner」によると:
すべてのファイナライザーが実行され、ドメインで実行中のスレッドがなくなると、CLR は内部実装で使用されるすべてのメモリ内データ構造をアンロードする準備が整います。ただし、これが発生する前に、ドメインに存在するオブジェクトを収集する必要があります。次のガベージ コレクションが発生した後、アプリケーション ドメインのデータ構造はプロセス アドレス空間からアンロードされ、ドメインはアンロードされたと見なされます。
私は彼らの言葉を誤解していますか?予期しない動作を再現するために次の解決策を実行しました(.net 2.0 sp2で):
このインターフェイスを含む「Interfaces」という名前のクラス ライブラリ プロジェクト:
「Interfaces」を参照し、次のクラスを含む「ClassLibrary1」という名前のクラス ライブラリ プロジェクト:
「Interfaces」プロジェクトを参照し、次のロジックを実行するコンソール アプリケーション プロジェクト:
コンソール アプリケーションを実行したときの出力は次のとおりです。
注意事項:
ガベージ コレクションはプロセスごとに行われます (単なる復習)
アンロードされる appdomain 内のオブジェクトにはファイナライザーが呼び出されますが、ガベージ コレクションは行われません。AllocateMemory() によって作成された 10 メガバイトのオブジェクトは、上記の例で明示的な GC.Collect() を実行した後にのみ収集されます (またはガベージ コレクターが後で収集する場合)。
その他の注意事項: XmlClass がファイナライズ可能かどうかは問題ではありません。上記の例でも同じ動作が発生します。
質問:
AppDomain.Unload を呼び出してもガベージ コレクションが発生しないのはなぜですか? その呼び出しをガベージ コレクションにする方法はありますか?
AllocateMemory() 内で、LargeObject ヒープ上に生成され、第 2 世代のオブジェクトとなる短期間の大きな xml ドキュメント (16 MB 以下) をロードする予定です。明示的な GC.Collect() またはガベージ コレクターの他の種類の明示的なプログラムによる制御に頼らずにメモリを収集する方法はありますか?
c# - 新しい AppDomain で WPF アプリケーションを実行するにはどうすればよいですか? ExecuteAssembly が失敗する
アプリケーション ドメインを使用して、コンソール アプリケーションから WPF アプリケーションを起動しようとしていますが、起動すると予期しないエラーが発生します。
WPF アプリケーションをスタンドアロンで実行すると、機能します。
このコードも機能します。
しかし、このコードは以下のエラーで失敗します。エラーは空のコンストラクターにあるようです。
スタックトレース:
私は何か間違ったことをしていると思いますが、それが何であるかを理解できません。助けてくれてありがとう。
actionscript-3 - Actionscript 3の外部swfキャスティングの問題のロード
actionscript 3.0 で外部定義されたクラスを読み込もうとすると、何か問題が発生します。これは、ApplicationDomain / LoaderContext クラスの理解に問題があると思いますが、ドキュメントを読み、いくつかの Web 検索を行った後でも、まだ立ち往生しています。
基本的に、私がやりたいことは、呼び出し元の swf と読み込まれた swf の間で共有されるインターフェイスの実装であるシンボルを含む swf を読み込むことです。swf を正常にロードし、メソッドをインスタンス化して実行することはできますが、それを共有インターフェイス タイプにキャストしようとしない限りは問題ありません。キャストしようとすると、 TypeError: Error #1034: Type Coercion failed: type error が発生します。
これは、新しいクラスをロードすると、フラッシュが完全に異なるクラスとして認識されるため、例外が発生するためだと思われます。ドキュメントでは、ApplicationDomain を ApplicationDomain.currentDomain に設定して、LoaderContext 引数を使用することを提案しています。
問題は、これが効果がないことです。ApplicationDomain を currentDomain、null、または現在のドメインの子に設定したかどうかに関係なく、型強制失敗エラーが引き続き発生します。エラーの :: 部分は、ロードしたクラスが別の名前空間などにあることを示しているようですが、ローダーと同じ名前空間に配置したい場合です。
コード:
インターフェイス宣言:
インターフェイスの実装
.net - アプリケーショングローバルエラーロガー
例外が適切に処理されなかったvb.netアプリケーションで作業しているとき。大変な苦痛でした。そのため、ホストアプリケーションのグローバルな場所に1行のコード/最小限のコードを記述せずに、アプリケーションのすべてのエラーをログに記録するライブラリやサービス、またはある種のexeを生成できる場合は、アイデアが浮かび上がりました。私はそれが少しクレイジーに聞こえることを知っていますが、Windowsイベントロガーは同じことをします。だから私も同じことを考えました。もっとはっきりさせておきましょう。アプリケーションabc.exeがあり、trycatchが1つもないとします。そのアプリを使用している間、私は多くのバグに直面しています。ここで、アプリケーションソースを掘り下げる代わりに、マネージドとcomの両方を含む、そのアプリのすべての未処理の例外を実行してログに記録する別のアプリをコーディングしたいと思います。
ですから、教祖は私を助けてくれるように頼まれています。ApplicationDomainが便利だと思います。私はMSDNブログでリックなどの名前に出くわしましたが、もうつかみませんでした。したがって、簡単なソースまたはコードの一部が役立ちます。回答とともにサンプルコードを追加してください。
それは大きな助けになるでしょう。
まとめ
インジェクターのアセンブリが配置されている任意のアプリケーションに自分自身を注入するアプリケーションが必要です。つまり、アプリケーションD:\ xyz \ myapp \ abc.exeがある場合、アプリケーションをexeとして持っていた場合、それをmyappフォルダー内に配置すると、abc.exeの実行後、ユニバーサルエラーロガーアプリケーションが動作を開始します。現在のアプリケーションドメインに自分自身を注入します。また、サービスとして作成する場合、マルチスレッド化されるかどうかも教えてください。
flash - ApplicationDomain.domainMemory とは何ですか?
AS3 では、何ApplicationDomain.domainMemory
のためですか?
.net - モジュールをロードおよびアンロードするには、アプリケーションドメインの境界を越えてアセンブリをどのようにロードする必要がありますか?
実行時にアセンブリを動的にロードすることで、アセンブリをアンロードできないという制限があることを認識しています。代わりに、これが要件である場合は、代わりに他のアプリケーションドメインにモジュールをロードしてから、ドメインの境界を越えてコードを実行することをお勧めします。
この開発プロセスを簡単にして、このシナリオで作業するにはどうすればよいですか?どのようなツールまたはフレームワークが利用できますか?
apache-flex - SWFLoaderを介してロードする場合、ApplicationDomain.currentDomainをどのように指定しますか?
Flex Builder 3を使用して、かなり大規模なプロジェクトを構築しています。モジュールが互いに足を踏み入れたり、アプリケーション/モジュール間の競合が発生したりしています。私の構造は次のようになります。
メインアプリケーション|-アプリケーション2|-アプリケーション3|-アプリケーション3
(アプリケーション2はメインアプリケーションの子であり、アプリケーション2と3は兄弟であり、アプリケーション2の子です)
実際にはそれよりも複雑ですが、ここから問題が始まります。結局、私は木を4レベルまたはおそらく5レベルの深さにすることができました...それを機能させることができれば。メインのアプリケーションファイルは、キャンバスと一連のボタンだけで構成されています。2番目のアプリケーションには、コンテナとしてのキャンバス、2つのタブ内のリスト、およびツリービューを備えた垂直タブナビゲーターが含まれています。アプリケーション3は、アプリケーション4のイベントカレンダーと同様に非常に複雑です。相互作用が発生しない限り、すべてが読み込まれ、正常に表示されます。モジュール2と3を見ると、どちらにもComboBoxがあります。最初にアクセスするものは正しく機能しますが、2番目のものはエラーをスローします。これはサンドボックス違反と見なされます。アプリケーション2を変換しました 3と4をモジュールに追加し、ModuleLoaderを使用してモジュールを取り込み、ApplicationDomain=currentDomainを指定しました。これで、最後の(現在のモジュール)のカレンダー関数はまったく表示されません。値をトレースしてアラートボックスを表示できるので、少なくとも読み込まれていることがわかりますが、何も表示されません。テストとして、そのモジュールを取り除いて、「テスト」と書かれたラベル以外は何も含まれていません。正常に表示されますが、Canvasコンポーネント内に配置すると、何も表示されません。しかし、そのモジュールをアプリケーションに変換して戻し、SWFLoaderを使用してロードすると、正常に表示されますが、それに並行して別のアプリケーションを取り込もうとすると、すぐに元の場所に戻ると確信しています。開始しました。so.dataとLocalConnectionsを簡単に使用して、情報をやり取りできます。しかし、SWFをアプリケーションとしてロードしてアプリケーションドメインを指定するにはどうすればよいですか?すべてがcurrentDomainとして存在し、うまく再生できると便利です。