3 回答

TA貢獻1833條經驗 獲得超4個贊
VB6 / VBA使用確定性方法存儲對象。每個對象存儲對其自身的引用數量。當數字達到零時,對象將被銷毀。
當對象變量Nothing
超出范圍時,保證將其清除(設置為),這將減少其各自對象中的引用計數器。無需手動操作。
當您需要顯式清理時,只有兩種情況:
當您要在對象的變量超出范圍之前對其進行銷毀時(例如,您的過程將花費很長時間執行,并且該對象擁有資源,因此您希望盡快銷毀該對象以釋放對象)資源)。
在兩個或多個對象之間具有循環引用時。
如果
objectA
存儲objectB
并objectB
引用了objectA
這兩個對象,則除非通過顯式設置objectA.ReferenceToB = Nothing
或制動鏈,否則這兩個對象將永遠不會被破壞objectB.ReferenceToA = Nothing
。
您顯示的代碼段是錯誤的。無需手動清理。進行手動清理甚至有害,因為這會使您對更正確的代碼有錯誤的認識。
如果在類級別具有變量,則在銷毀類實例時將清除/銷毀該變量。您可以根據需要提前銷毀它(請參閱第項1.
)。
如果在模塊級別具有變量,則在程序退出時(或在VBA情況下,當VBA項目重置時)將清除/銷毀該變量。您可以根據需要提前銷毀它(請參閱第項1.
)。
變量的訪問級別(公共或私有)不會影響其生存時間。

TA貢獻1803條經驗 獲得超3個贊
VBA使用通過引用計數實現的垃圾收集器。
一個給定對象可以有多個引用(例如,Dim aw = ActiveWorkbook創建對Active Workbook的新引用),因此,垃圾收集器僅在明確沒有其他引用時才清除該對象。設置為Nothing是減少引用計數的一種明確方法。退出范圍時,計數將隱式遞減。
嚴格來說,在現代Excel版本(2010+)中,沒有必要將“無”設置為“空”,但是較早版本的Excel存在一些問題(為此必須明確設置解決方法)

TA貢獻1812條經驗 獲得超5個贊
我至少有一種情況不會自動清除數據,最終將導致“內存不足”錯誤。在用戶窗體中,我有:
Public mainPicture As StdPicture
...
mainPicture = LoadPicture(PAGE_FILE)
銷毀UserForm后(Unload Me),mainPicture未取消分配為中加載的數據分配的內存。我必須添加一個明確的
mainPicture = Nothing
在終止事件中。
- 3 回答
- 0 關注
- 1808 瀏覽
添加回答
舉報