問題タブ [rcw]
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# - アウトプロセス COM サーバーにバインドされた RCW オブジェクトをガベージ コレクションでクリーンアップするにはどうすればよいですか?
何日も実行する 64 ビットの .NET プロセスがあります。このプロセスは、DCOM を使用してネイティブの 32 ビット COM サーバーを使用します。.NET プロセス ガベージ コレクターは COM オブジェクトの RCW しか認識せず、それらは非常に軽量で "収集する価値がない" ため、COM サーバーがメモリ不足になることがあります。どうにかしてガベージ コレクターにこれらの COM オブジェクトを認識させる必要があります。
記録のために、同じコードを定期的に強制的に実行してガベージ コレクションを開始しようとしましたが、問題は解決したため、問題は何らかのリークではなく、オブジェクトが十分に速く収集されなかっただけです。
GC.AddMemoryPressure()
はい、より多くのメモリを消費していることをガベージコレクターに伝えることができる方法があることは知っています。問題は、64 ビットの .NET プロセスがそれを「大したことではない」と見なす可能性があることです。これは 64 ビットであり、ここではギガバイトであり、別のギガバイトでもあります。これらの割り当てにはるかに敏感です。
したがって、64ビットプロセスにとって「大したことではない」かもしれないことは、32ビットプロセスにとっては確かに大したことであり、64ビットプロセスのガベージコレクターを、使用されるメモリの量に対してより敏感にする必要があります別のプロセスによって。
64 ビット プロセスがタイムリーに RCW を収集し、32 ビット COM サーバーがメモリ不足にならないように、この状況を処理するにはどうすればよいでしょうか?
c# - 特定のタイプのオブジェクトのみのコレクションを強制することはできますか?
RCW がタイムリーに収集されないという問題があります。コード内からガベージコレクションを定期的に強制開始することを考えています。ただし、それが望ましくない速度低下をもたらすかどうかはわかりません。
私は実際にすべてのオブジェクトを収集することに興味はありません.収集されたRCWのみが必要であり、それらはすべてSystem.__ComObject
タイプを持っています. それらだけを集めた方が速いと思います。
特定のタイプのオブジェクトに対してのみガベージ コレクションを強制することは可能ですか?
c# - C# からの C++/CLI アセンブリの読み込み
C# アプリケーションから使用する一連の独自の COM オブジェクトを中心に C++/CLI RCW を作成しています。RCW と C# アプリケーションをデプロイすると、FileNotFound エラーが発生します。
この後、私は可能な限り簡単なことをしました:
C++/CLI (VS2012) で記述された .NET クラス ライブラリ。デフォルトの実装にコードは追加されていません。
AC# Windows Forms アプリケーション、ソリューション、およびプロジェクトが x86 をターゲットに設定されています。C++/CLI クラス ライブラリに参照が追加されました。ただし、C# アプリケーションのフォームはボタンであり、C++/CLI ライブラリの Class1 のインスタンスを作成します。
エラーは同じです。詳細に:
Fusion Log Viewer を使用してエラーを見つけようとしましたが、ログによると、ClassLibraryTest.dll が正常に読み込まれています。
ここで何が欠けていますか?
vb.net - 「Option Strict On は暗黙的な変換を許可しません」という一貫性のない強制
- 構成 1: .NET 4.5.2 フレームワークを対象とする Visual Studio 2015 を使用して ArcMap 10.4 用の ESRI アドインを構築する
- 構成 2: .NET 3.5 フレームワークを対象とする Visual Studio 2013 を使用して、ArcMap 10.3 用の ESRI アドインを構築する
- 構成 3: .NET 4.5.2 フレームワークを対象とする Visual Studio 2013 を使用して、ArcMap 10.4 用の ESRI アドインを構築する
VB.NET プロジェクトで Option Strict On を適用しても、2 つのプロジェクトではエラー BC30512 が発生せず、別のプロジェクトでは発生する理由を理解しようとしています。構成 1 を使用するとエラーが発生するが、構成 2 または 3 ではエラーが発生しないコード行の例を次に示します。
さらに、コクラスの代わりにマネージド クラスをインスタンス化すると、どちらの構成でもエラーは発生しません (次の行を参照)。
ArcMap のさまざまなバージョンによって、対象となるフレームワークのバージョンが決まります。追加の背景については、ArcObjects ドキュメントの COM から .NET 型への変換が関連しています 。Using ArcObjects (COM-based) in .NET (ArcObjects .NET 10.4 SDK)
エラーが構成 1 でトリガーされ、構成 2 または 3 ではトリガーされないのはなぜですか? そして、コクラスではなくマネージ クラスでインスタンス化されたときに、構成 1 でエラーがトリガーされないのはなぜですか?
dotnet/roslyn github リポジトリに提出された問題へのリンク。 https://github.com/dotnet/roslyn/issues/13314
ありがとうシア