加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在VB6 / VBA中是否真的需要对象清除/数组释放(优点/缺点?)

发布时间:2020-12-17 00:17:48 所属栏目:大数据 来源:网络整理
导读:我从VB中学到的很多东西都是从静态代码分析(特别是Aivosto的项目分析器)中学到的.它检查的一件事是你是否清除了所有对象和数组.我曾经盲目地这样做,因为PA这么说.但是现在我对VB释放资源的方式了解得更多,在我看来,这些事情应该自动发生.这是VB6之前的遗留功
我从VB中学到的很多东西都是从静态代码分析(特别是Aivosto的项目分析器)中学到的.它检查的一件事是你是否清除了所有对象和数组.我曾经盲目地这样做,因为PA这么说.但是现在我对VB释放资源的方式了解得更多,在我看来,这些事情应该自动发生.这是VB6之前的遗留功能,还是有理由将对象显式设置为空,并在阵列上使用Erase?
正如我所理解的那样,问题与VB6(及其前身)源于COM及其引用计数垃圾收集系统的事实有关.

例如,想象一下,您从第三方库声明对对象的引用.该对象具有COM引用计数,用于使其保持活动状态并确定何时应该销毁它.当您将其设置为Nothing时,它不会被销毁,但是当对象的引用计数达到零时,它不会被销毁.

现在,并非所有COM组件都是用Visual Basic编写的.有些是用C或C编写的.所有语言都不存在结构化异常处理.因此,如果发生错误,则无法保证对象上的引用计数被正确减少,并且已知COM对象的挂起时间比预期的要长.这本身并不是Visual Basic的问题.这是一个COM问题. (而且,您可能会注意到,这就是.NET不使用引用计数的原因.)

这就是Visual Basic开发人员在退出例程之前释放对象引用的过程的原因.你根本不知道你所分配的组件是在底层创建的.但是当你发布它的引用时,你至少会释放你的引用计数.它几乎成了宗教的口头禅.声明,使用,发布.这是COM的做事方式.

当然,在解除引用我在堆栈上声明的变量时,Visual Basic可能会更好或更快.但该死的,我希望看到这些物品被释放是显而易见的.当你试图追踪内存泄漏时,一点点保证会有很长的路要走.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读