DLL 内のレガシー コードを使用して、製造された製品をテストするためのアプリケーションがあります。アプリケーションは、さまざまな製品用にセットアップできます。セットアップは xml ファイルを介して行われ、実行時、つまり End-Of-Lot で変更することができます (変更する予定です)。xml の処理は、前述のレガシー dll によって行われます。
長時間 (数日から数週間) 実行した後、メモリ フットプリントが増加していることに気付きました。それをデバッグすると、(可能性のある) リークを dll に追跡することができました。ソースを取得した後、次のようなものが見つかるまでさらに調査できました。
CAObjHandle doc;
MSXML6_NewDOMDocument40IXMLDOMDocument2(0, 0, LOCALE_NEUTRAL, 0, &doc);
[...]
MSXML6_IXMLDOMDocument2load(doc, 0, vtPath, &success);
私には思えますが、これは毎回呼び出され、新しいロットが開始されます。そしてdoc
、記憶の中にあるように見えるのは、この構造です。解放されている場所が見つかりません。
結局、dll には、(CVI 関数の) 解放されていないオブジェクトからの多くの小さなリークがありました。それらを修正しましたが、この MS オブジェクトを解放する方法がわかりません。私はこれに出くわしました: MSXML ガベージ コレクション メカニズムを理解していますが、ANSI-C コードを取得した後、GC をどうするか、それが機能するかどうかわかりません。
MSXML オブジェクトを手動で解放する方法はありますか?