相互に参照する 2 つのディクショナリ オブジェクトを作成すると、それらを明示的に何も設定しなかった後でもメモリ内に残ります。次のコードは 1 GB を超えるメモリを消費します
Dim i
For i = 1 to 100000
leak
Next
Sub leak
Dim a, b
Set a = createObject("scripting.dictionary")
Set b = createObject("scripting.dictionary")
a.Add "dict1", b
b.Add "dict2", a
Set a = Nothing
Set b = Nothing
end sub
これは、一部のガベージ コレクションとは関係ありません (VBScript はそうしません)。証拠:メモリ消費量を変更しても、妥当な制限内にとどまりa.Add "dict1", b
ますa.Add "dict1", "foo"
。b.Add "dict2", a
a.Add "dict2", "bar"
ちなみに、これは辞書が自分自身を参照している場合にも発生します。
Sub leak
Dim a
Set a = createObject("scripting.dictionary")
a.Add "dict1", a
Set a = Nothing
end sub
これらの相互参照辞書のようなオブジェクトを、メモリ内でも破棄される方法で破棄することは可能ですか?