gpt4 book ai didi

excel - 将对象设置为 "Nothing"有什么好处

转载 作者:行者123 更新时间:2023-12-02 00:54:14 25 4
gpt4 key购买 nike

我注意到 Stack Overflow 社区的一些成员会在关闭过程中使用 Set Object = Nothing。我能够找到为什么这对于 Access 实例很有用,但在为 Excel 执行此操作时没有令人满意的答案,所以我的问题是在 VBA 中将对象设置为 Nothing 有什么好处?

在下面的示例代码中,将我的对象 wsTest 设置为 Nothing 是否浪费空间? 否则,如果这样做实际上是很好的做法,为什么?

Dim ws as Worksheet
Dim Test as Range

Set ws = Sheets(“Sheet1”)
Set Test = ws.Range(“A1”)

'Utilize Test variable (copy, paste, etc)

Set Test = Nothing
Set ws = Nothing

Exit Sub

最佳答案

如果这是托管 .NET 代码(垃圾收集),您必须释放您曾经访问过的每个 COM 对象,以免主机进程(EXCEL.EXE) 可能会在后台继续运行,消耗内存并且无法完全卸载。

但这是 VBA 代码(引用计数),而且使用主机应用程序控制的对象的 VBA 代码 - 当主机应用程序关闭时以及发生这种情况时,这些对象将消失VBA 执行上下文早已消失。

换句话说,所有这些Set ... = Nothing指令都是完全多余的。

<小时/>

在某些特定情况下,当您处理第 3 方 API/类型库时,对象可能无法完全清理。例如,您可能正在创建一个 Access.Application 实例,并发现“幽灵”ACCESS.EXE 进程在 Excel 退出后在任务管理器中保持打开状态:这表明​​您正在泄漏对象以某种方式在某处引用,Set ... = Nothing 可以帮助防止这种情况发生。

但是我不建议像这样系统地清空所有对象引用。仅当这样做时才会出现问题。即便如此,拖累一切的也只是一两个物体,而不是所有物体。如果 ACCESS.EXE 正确关闭,则没有理由用此类指令使您的代码变得困惑。

避免在全局状态中存储对象引用也有帮助。如果一切都是本地的,理论上,一旦本地作用域退出,所有涉及的对象都会被销毁。

关于excel - 将对象设置为 "Nothing"有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51065566/

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