VB6集合/对象引用

时间:2011-03-25 00:49:02

标签: memory object collections vb6 dictionary

我想知道是否有人能够在发生以下情况时告诉记忆发生了什么:

Dict = New Dictionary --- Col = New Collection
Dict.Add Key, CustomClassOne
Dict.Add Key2, CustomClassTwo
Dict.Add Key3, CustomClassThree
Dict.Remove Key3
At this point is Key3 removed from memory or would I have to Set Dict.Item(Key3) = Nothing to remove it from memory?
Set Dict = Nothing '// will this remove All the above added custom class objects?
Set Col = Nothing '// Same question as above

Ugh VB内存管理....适合您的时间, - 奥斯汀

2 个答案:

答案 0 :(得分:2)

VB是引用计数。

从内存中释放对象的规则很简单..当没有对该对象的引用时会发生这种情况。每当一个对象超出范围(例如函数的结尾)时,它的引用计数就会减少;这可能反过来导致该对象引用的任何对象的引用计数也减少;如果他们的引用计数达到0,它们也会从内存中释放出来。

这就是为什么通常不需要设置对象对Nothing的引用...这将减少它的引用计数,但是当它超出范围时也会发生。

所以回答你的问题:

Dict.Remove Key3是从内存中删除CustomClassThree和Key3所需的全部内容(只要您没有指向此对象的其他引用)。

设置Dict = Nothing将从内存中删除所有内容,但是当它超出范围时会发生这种情况(再次假设没有其他引用指向它包含的对象)。

Col似乎与其他语句没什么关系,当它超出范围而不需要设置Col = nothing

时会从内存中删除

注意:

如果您的对象都具有彼此的引用,则设置对零的引用的目的才真正有用。查找循环引用以获取详细信息

答案 1 :(得分:1)

当对象的最后一次引用消失时,使用Scripting.Dictionary和Collection实例,然后释放它们持有的对象引用。对象本身是否已取消分配取决于另一个变量是否包含对同一对象的引用。

将每个参考文献想象为在深渊之上抱着岩石的绳索。直到最后一根绳子被切断,岩石才会不再存在。

从字典或集合中删除项目会切断一根绳子。

相关问题