2017-05-29 64 views
2

我已經看過多次。上次我看到有人創建了一個Excel應用程序對象。他結束了自己的應用程序那樣:Does Object =在Application.Exit調用之前沒有任何意義嗎?

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 

這有任何意義嗎?無論如何不會關閉應用程序本身釋放所有已用內存?什麼時候這樣做是有道理的?

+4

這沒有意義。許多.NET程序員並不真正瞭解垃圾收集器的工作原理和習慣,尤其是在Office interop代碼中。 [本Q + A]中的一些背景(https://stackoverflow.com/questions/17130382/understanding-garbage-collection-in-net)。 –

+2

一如既往,您的絕佳回答。這將爲「盧克賦予漢斯帕蘇特名聲」 - 增加另一個。謝謝。 – Luke

+0

我會檢查是否有多個隱藏的Excel實例仍然在後臺運行(任務管理器)完成後。如果沒有正確清理,Excel互操作對象會保持Excel運行。這可能不是這種情況,但看起來他正在清理VBA風格的對象。他可能習慣使用VBA。可能沒有其他問題,但我會檢查那些仍在運行的Excel應用程序以防萬一。 –

回答

1

這可能會回答你的問題: https://blogs.msdn.microsoft.com/ericlippert/2004/04/28/when-are-you-required-to-set-objects-to-nothing/

但是忽略了一點鏈接就在那裏,沒有它有點是沒有意義的,至少在這個時代,就像他在說在後,或許舊版本是必需的。

+1

感謝您的鏈接。正如我預料的那樣,它不再是必需的。 – Luke

+0

不客氣;)從經驗的角度來看,我已經在VB.net編程了幾年,但在退出應用程序之前我從來沒有這樣做,它可以防止未來的錯誤,但我不認爲那裏將永遠是一個會阻止內存轉儲的錯誤,除非有應用程序退出的錯誤,但進程因爲被鎖定到文件而保持運行。但歡迎您;) – MrSanchez

1

應用程序結束之前?無意義。

否則這是很好的做法,恕我直言。

相關問題