1

ソリューションで参照されている VB6 COM dll を使用する Windows サービスに問題があります。

このサービスは、タスクを実行するスケジューラです。各タスクはスレッドで実行されるため、ユーザーはいくつかのタスクを同時に実行できます。

スレッドが開始すると、オブジェクト (C_AUTO という名前の vb6 dll 内) が "New" 構文で c# に作成されます。このオブジェクトのコンストラクターは、タスクを実行するために他のオブジェクトを作成します。タスクが終了すると、C_AUTO のデストラクタは set ... = nothing で他のすべてのオブジェクトを破棄します。オブジェクト C_AUTO が破棄され、スレッドも破棄されます。

私の問題は、サービスが別のタスクを実行すると、別のスレッドが別の C_AUTO オブジェクトとして作成されることです。メモリ ポインターの値をファイルに書き込むスニペットを追加しました。値は同じであるため、C_AUTO によって作成されたすべてのオブジェクトは破棄されません。

タスクが終了したときにすべてのオブジェクトをアンロードできる「新しい」構文を使用せずに VB6 dll をロードする別の方法はありますか? 数日後、サービスが大量のメモリを消費し、タスクがクラッシュしたためです。

ご協力いただきありがとうございます

4

1 に答える 1