【发布时间】:2017-10-29 14:42:12
【问题描述】:
我已经看过很多次了。上次我看到它时有人创建了一个 excel 应用程序对象。他就这样结束了他的申请:
myExcelObj = Nothing
Application.Exit()
我确信将引用点设为空不会关闭在后台运行的 excel 应用程序。还看到了很多不可见的对象,如下所示:
Public Class myClass
Var1 as Integer = 0
Var2 as SQLConnection
Var3 as Whatever
Public Sub New()
Var1 = Maths.Rnd(0,1)
Var2 = SomeStaticClass.GetSQLConnection()
Var3 = New Whatever(Var1)
End Sub
End Sub
(...)
// Somewhere in the Code (...)
Private Sub EndItAll(sender as Object, e as EventArgs)
Me.My_myClassObject = Nothing
Application.Exit()
End Sub
这有意义吗?无论如何,关闭应用程序本身不会释放所有使用过的内存吗?什么时候这样做才有意义?
【问题讨论】:
-
这没有意义。许多 .NET 程序员并不真正了解垃圾收集器的工作原理并养成了不良习惯,尤其是在 Office 互操作代码中。 this Q+A的一些背景。
-
一如既往地为您提供很好的回答。这将为“卢克给予汉斯·帕桑特声誉”-计数器添加另一个。谢谢。
-
完成此操作后,我会检查是否有多个“隐藏”的 Excel 实例仍在后台(任务管理器)中运行。如果没有正确清理,Excel 互操作对象往往会使 Excel 保持运行。这可能不是这里的情况,但看起来他正在清理 VBA 样式的对象。他可能从使用 VBA 中养成了这个习惯。可能没有其他问题,但我会检查那些仍在运行的 Excel 应用程序以防万一。