問題タブ [unmanaged]
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.
.net - 重要なアンマネージ コードを呼び出す .NET アプリケーションでメモリ使用量が多いことを検出して分離するには、どのようなツールと手法を使用できますか?
C# で記述された WinForms .NET アプリケーションがあるとします。このアプリケーションは、マネージ ヒープとアンマネージ ヒープの両方から大量のメモリを割り当てます。Red Gate ANTS Profiler (私は使用していません) やJetBrains dotTraceなどのツールを使用して、管理対象オブジェクトの割り当ての詳細 (誰が、いつ、どれだけなど) を (比較的) 簡単に把握できます。
問題が発生するのは、マネージ オブジェクトが重要なネイティブ リソース (イメージや大きな COM オブジェクトなど) を使用する場合、または大量のメモリを必要とするアンマネージ サード パーティ ライブラリを呼び出す場合です。これまでのところ、1) メモリを大量に消費しているのはマネージ コードかアンマネージ コードか、および 2) アンマネージ ヒープを大量に使用しているのは誰かを突き止めるために、調査作業を行う必要があります。
現時点で私が持っている唯一の手法は、マネージド ヒープとアンマネージド ヒープのサイズ、割り当てなどを比較するパフォーマンス カウンターを perfmon に設定することです。ネイティブ リソースを消費するアンマネージ ライブラリや .NET オブジェクト。
大量のマネージコードとアンマネージ コードを扱う開発者を支援するツールと手法の最適な組み合わせは何ですか?
更新:より明確にするために、マネージ コードから呼び出されるアンマネージ コードでメモリの問題 (高使用率、リーク) を検出する方法を知りたいです。dotTrace のような製品は、管理対象オブジェクトのみを追跡すると思います。
.net - プログラム終了時の LoaderLock エラー
私は最近、純粋にアンマネージ コード (Visual Studio 6 でコンパイルされた C++ および VB6 コンポーネント) で開発されたアプリケーションの 1 つに .NET NLog ログ コンポーネントを統合しました。COM インターフェイスを介して NLog と通信する C++ アプリケーションが多数あります。
現時点ではすべて正常に動作していますが、プログラムの終了中に次のメッセージがポップアップすることに気付きました (VS6 で C++ コンポーネントをデバッグしている場合は出力ウィンドウに、VS 2005 経由で NLog をデバッグしている場合は IDE のプロンプトとして)。
LoaderLock が検出されました メッセージ: OS ローダー ロック内でマネージ実行を試みています。DllMain またはイメージ初期化関数内でマネージ コードを実行しようとしないでください。実行すると、アプリケーションがハングする可能性があります。
DllMain は次のとおりです。
私の推測では_Module.Term();
、いくつかの .NET 参照のリリースが含まれており (毎回インスタンス化してリリースする必要がないように、C++ クラスの 1 つで NLog オブジェクトへの参照を保持しています)、この警告がポップアップ表示されます。
私の質問: これは無視しても安全ですか? そうでない場合、適切な回避策は何ですか? (私が考えることができる最善の方法は、そのNLogオブジェクトへの参照をインスタンス化し、ログファイルに書き込みたいたびにそれを解放することです...最も洗練されたソリューションではありません)
c# - C DLL から .NET へのインターフェイス
C# .NET アプリケーションから呼び出したい C で記述されたレガシー DLL があります。問題は、C DLL の DLL インターフェイスがかなり複雑なことです。それは次のようなものです:
BIG_INPUT_STRC/BIG_OUTPUT_STRC には、あらゆる種類のものが含まれています...バッファ配列へのポインタ、列挙型パラメータ、整数パラメータなどです。要するに、それらは複雑です。
最初の質問: DLL ヘッダー ファイルに含まれるすべての構造情報を C# クラスに取得する簡単な方法はありますか? それとも、文字通りすべてを C# にコピー アンド ペーストして再定義する必要がありますか? これは冗長に思えます。
それに関連して、C# からアンマネージ DLL に構造体を渡す正しい方法は何ですか?
最後に、バッファー配列を C# からアンマネージ DLL に正しく渡す方法の例はありますか? または、2 次元配列を DLL に渡すにはどうすればよいですか?
ありがとう - グレッグ
c# - アンマネージド/マネージド相互運用 - int[] を渡す際の問題
私は化学の博士号を取得しようとしています。そのため、顕微鏡下でのサンプルのイメージングに役立つソフトウェア アプリケーションを作成する必要があります。この顕微鏡には、xyz ナノポジショニング ステージが取り付けられています。ステージは、ハードウェア ベンダーによって VC++ で記述されたアンマネージ DLL を使用して制御されます。必要なものの詳細を提供できますが、まずはこれから始めましょう。
dll のメソッドの 1 つを使用すると、運動軸の設定を読み取ることができます。
C++ 構文:
BOOL は、規則に従って int 0 または 1 です。
私のC#ラッパーには以下が含まれています:
これは私には正しいようです。ただし、メインアプリケーションで次のようなことを試すと(軸1、2、および3を照会するため):
私は一貫して次のような配列を取得します:
{6, 0, 10} ですが、デバイス自体の表示に従って {0, 0 , 0} を取得する必要があります。補完機能:
BOOL E7XX_SVO (int ID, const char* szAxes, const BOOL* pbValueArray)
ステージに同じステータスビットを設定することもできません...
dll の他のコマンドは完全に機能します。問題なく文字列とダブルスを出し入れできますが、BOOL型は受け渡しできません...
何が悪いのか分かりますか?
c# - アンマネージ コードと比較して、TCP/UDP ソケットで大量のデータを読み書きする場合、マネージ コードのパフォーマンスは低下しますか?
マネージド アプリケーションでの C# TCP/UDP ソケットの使用は、ネイティブ C++ バージョンと (ほぼ) 同じ量のデータを処理できると思いますか? そうでない場合、ネイティブまたは C# を使用する方が適していると見なすデータ量と、マネージド側での実装における最大の障害は何ですか?
visual-c++ - アンマネージC++クラスからマネージC++クラスを派生させることはできますか?
管理されていないdllで記述した管理されていないC++クラスがあります。アンマネージdllを参照するマネージdllがあります。管理されたdllのクラスは、管理されていないクラスから派生できますか?
VisualStudio2008の使用
c# - マネージド/アンマネージド .net コードとは何ですか? また、どのような違いがありますか?
このあたりでは、マネージドおよびアンマネージドという用語がかなり使われています。オンラインで検索すると、それらが何であるかについてのあいまいな概念を得ることができますが、本当に知っておく必要があるのは、それが C# デスクトップ アプリの開発者である私にどのように影響するかということです。どの時点で何を扱っているかを知るにはどうすればよいですか? また、そのコードへのアプローチがどのように変わるのでしょうか?
複製
vb.net - VB .NET のアンマネージ DLL からのコールバック関数
VB.NET でアンマネージ DLL を使用しようとしています。dll で提供されるソース コードの例は VB6 であり、以下は .NET に変換しようとする私の試みです。dll がコールバックを実行しようとすると、「保護されたメモリの読み取りまたは書き込みを試行しました」という例外が発生します。コールバック関数が実際に呼び出されることは本当に気にしません。私のコード:
元の VB6 サンプル コード:
元の dll ヘッダー