ソリューションで参照されている VB6 COM dll を使用する Windows サービスに問題があります。
このサービスは、タスクを実行するスケジューラです。各タスクはスレッドで実行されるため、ユーザーはいくつかのタスクを同時に実行できます。
スレッドが開始すると、オブジェクト (C_AUTO という名前の vb6 dll 内) が "New" 構文で c# に作成されます。このオブジェクトのコンストラクターは、タスクを実行するために他のオブジェクトを作成します。タスクが終了すると、C_AUTO のデストラクタは set ... = nothing で他のすべてのオブジェクトを破棄します。オブジェクト C_AUTO が破棄され、スレッドも破棄されます。
私の問題は、サービスが別のタスクを実行すると、別のスレッドが別の C_AUTO オブジェクトとして作成されることです。メモリ ポインターの値をファイルに書き込むスニペットを追加しました。値は同じであるため、C_AUTO によって作成されたすべてのオブジェクトは破棄されません。
タスクが終了したときにすべてのオブジェクトをアンロードできる「新しい」構文を使用せずに VB6 dll をロードする別の方法はありますか? 数日後、サービスが大量のメモリを消費し、タスクがクラッシュしたためです。
ご協力いただきありがとうございます