問題タブ [webapi]
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# - WebAPI を使用してメモリが着実に増加する
現在、特定のコア API のインターフェイスを構築しています。コアはネイティブ C で記述されており、C# を使用して HTTP 要求を適切なコア関数にリダイレクトする Web API をインターフェイスとして作成することにしました。ただし、http 要求を行うたびにメモリが増加し続けることがわかりました。その理由はわかりません。
私のシステムの仕組み:
次のように、httpリクエストを関数にマッピングするApiControllerがあります。
EngineMethods は、P/Invoke を介してネイティブ C++ 関数を呼び出すために使用されるクラスです。load 関数は、次のコードにリダイレクトされます。
load 関数は C++ で記述しています。次に、提供されたコア API を使用する必要があります (関数は既に実装されています)。コアはスレッドセーフではないため、すべての操作でこの Mutex を使用する必要があります。
「ロード」関数を次のようにします。
今私の問題は、「localhost:xxx/load/something」をスパムするとメモリが増え続けることです。古くて無関係な記憶は解放されないようです。C# のガベージ コレクターも有効にならず、手動で開始しても何もクリーンアップされません。アンマネージ メモリを割り当てて解放しないようです。しかし、私がしているのは、与えられたコアの関数を使用することだけです。そして、そのコアを使用するソフトウェアはずっと前にリリースされており、その機能をスパムしてもメモリが増加しないため、コアにあった機能にはメモリリークがあってはなりません。私が考えることができるのは、アイドル状態になって閉じないスレッドだけです...わかりません。コア関数を調べたところ、引数として指定された名前をコピーする前に古い名前が解放されます(そして、私が理解できない他のロード処理を行います)。