0

特定のファイル形式をロードするためにエターナル ライブラリ (DLL) を使用していますが、ロード機能が実際にはロードされないことがわかりました。同じオブジェクトに対して初めて呼び出されたときにロードされますが、新しいファイルを開くために再度呼び出すと、常にロードされるとは限りません。これにより、新しいファイルをロードするたびに CreateObject を呼び出す必要がありました。これに関する問題は、VB6 が古いオブジェクトをまったく解放していないように見え、RAM と VM の使用量がすぐに GB に膨れ上がることです。

これを強制的に解放する方法はありますか?変数を「Nothing」または「Null」に設定しても何も起こらず、アプリが肥大化して実際にメモリ不足になり、クラッシュします。(IDE が非常に古いため、Win7 では動作しないため、VM 内で実行する必要があります。動作させることができませんでした)

循環参照を探しましたが、ファイルはそのオブジェクトを使用して読み込まれ、ファイルのプロパティは ADO オブジェクトに読み込まれ、実際のファイル自体は ADO オブジェクトに参照されることはなく、さまざまなフィールドだけです。それから。

4

1 に答える 1

1

VB6 プロジェクトに直接参照があるか、「CreateObject」を使用してオブジェクト参照をインスタンス化するかは問題ではありません。サード パーティのコンポーネントにメモリ リークがある場合、どちらの方法でも同じ動作が発生します。

アンマネージド リソースをインスタンス化する場合は、"Dispose" を呼び出す必要があります。それ以外では、オブジェクト インスタンスは、メソッド呼び出しが完了したときに "範囲外" になり、Visual Basic ランタイムは (参照カウントを使用して) 参照をクリーンアップします。サード パーティのコンポーネントに実際にメモリ リークがある場合は、それを防ぐためにできることは何もないため、DLL にパッチを当てる必要があります。

于 2013-04-12T03:06:16.853 に答える