我发现自己最近不得不写一些VBA代码,只是想知道是否有人曾经遇到过有关VBA垃圾收集器如何工作的任何细节?.Net GC确实有很好的记录,但我在VBA GC上找不到一丝细节,除了模糊的提到它是一个参考计数器.我认为它与VB6 GC非常相似,但无法找到任何相关信息.
具体来说,我有兴趣知道:
这比任何特别需要知道的更多是出于好奇,任何洞察都非常感激!
Kon*_*lph 15
以下假设VBA 仍然使用VB6中使用的相同垃圾收集机制(它很可能会这样做).
VB6使用了引用计数GC.当对给定对象的最后一次引用设置为时,确定性地触发GC Nothing.设置本地引用Nothing是不必要的,这是因为它们超出范围.
每个对象都实现一个COM接口,负责处理该对象的引用计数.对象引用的每个赋值都更新所涉及引用的引用计数器(即先前引用的旧对象的计数器递减,并且新对象的计数器递增).当引用计数器达到0时,对象被垃圾收集.
因此,在VBA应用程序的生命周期内,永远不会收集循环引用中的对象.更重要的是,VBA没有提供打破循环引用的方法.在VB6中,可以通过WinAPI函数实现弱引用.
| 归档时间: |
|
| 查看次数: |
8403 次 |
| 最近记录: |