gpt4 book ai didi

VBA 垃圾收集器详细信息

转载 作者:行者123 更新时间:2023-12-02 03:51:21 24 4
gpt4 key购买 nike

我发现自己最近不得不编写一些 VBA 代码,只是想知道是否有人遇到过有关 VBA 垃圾收集器如何工作的任何细节? .Net GC 确实有很好的文档记录,但我找不到 VBA GC 的任何细节,除了模糊地提到它是一个引用计数器。我认为它与 VB6 GC 非常相似,但也找不到任何相关信息。

具体来说,我有兴趣知道:

  • 什么会触发 GC
  • 它使用什么算法(例如,集合是分代的吗?)
  • 它如何(如果有的话)处理循环引用?
  • 有没有办法监控其运行情况

这更多的是出于好奇,而不是任何特定的需要知道,非常感谢任何见解!

最佳答案

下面假设 VBA 仍然使用 VB6 中使用的相同垃圾收集机制(很可能是这样)。

VB6 使用了引用计数 GC。当对给定对象的最后一个引用设置为 Nothing 时,GC 将被确定性地触发。将本地引用设置为 Nothing 是不必要的,当它们超出范围时就会发生这种情况。

每个对象都实现一个 COM 接口(interface),该接口(interface)负责该对象的引用计数。对象引用的每次分配都会更新所涉及引用的引用计数器(即先前引用的旧对象的计数器递减,而新对象的计数器递增)。当对象的引用计数器达到 0 时,该对象将被垃圾回收。

因此,在 VBA 应用程序的生命周期中永远不会收集循环引用中的对象。此外,VBA 不提供打破循环引用的方法。在VB6中,可以通过WinAPI函数实现弱引用。

关于VBA 垃圾收集器详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com