中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

VB6和VB.NET在創建類和VB.NET對象的有什么變化

發布時間:2021-12-02 13:46:19 來源:億速云 閱讀:103 作者:小新 欄目:編程語言

小編給大家分享一下VB6和VB.NET在創建類和VB.NET對象的有什么變化,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

VB.NET對象的終止

在VB6中對象是在***引用移除后被終止的。換成另外一句話說,當沒有其它代碼引用這個對象的時候,這個對象將自動終止。具體觸發這個終止事件的是Class_Terminate。這種方法是使用引用計數來決定對象是否被終止的,是VB的一個直接的產品,它跟COM有緊密的聯系。

所以我們在需要終止這個對象的使用就調用Class_Terminate事件,使得很容易控制對象。但是它也有不足之處。很明顯地,雖然在兩個對象之間創建循環引用是很容易,但是它們將在內存中永遠地被運行。這正是在VB6中其中一種導致內存泄漏的缺陷。

這個內存泄漏問題在VB6以前的版本中是無法克服的。在VB6中,循環引用只發生在不同組件上。在VB6中,由相同的組件中的類創建而來的類將被自動終止,即使它們有循環引用。但是,如果對象來自不同的組件,循環引用問題就依然存在。這個是個很大的問題,它給許多VB開發人員帶來了麻煩。所以,在VB6中程序不得不尋求各種方法來終止對象。

不象COM,.NET不是使用引用計數來決定對象是否被終止的。取而代之的是,它使用了一個有名的“垃圾收集”方案來終止對象。可能聽到“垃圾收集”方案,您會云里霧里的,它的意思實際上是在VB.NET中我們不用預先定一個對象的終止方案,因此我們就不能準確地預測對象什么時候被終止的。下面我們詳細探討一下“垃圾收集”。 “垃圾收集”

在.NET中,引用計數不是一個基礎功能部分。相反地,對象是通過一個“垃圾收集”機理被終止。在某特定的時間(這決定特殊的規則),一個任務會在所有的對象中運行來查找哪些已經沒有被引用的VB.NET對象,并且將這些對象終止,即所謂的“垃圾收集”,名字是有點土,但更形象化。

由以上的討論我們可以知道,我們不能很準確地知道對象是在什么時候被終止的。我們除去對象的所有引用之后,并不是意味著對象快速地被終止了。此時對象還存在于內存中,直到垃圾收集處理程序運行之后才將它從內存中清除。

垃圾收集的主要好處是它清除了由引用計數帶來的循環應用問題。如果兩個對象互相有引用,并且在程序中沒有其它互相引用的代碼時,垃圾收集程序就會發現它們并將它們終止。這一點在COM中是不可能做到的,因為它們將在內存中永遠存在。

垃圾收集還有另外一個潛在的性能優點:在VB.NET對象被取消引用的時候不用花很多的精力在終止對象上;利用了垃圾收集,這個終止處理過程是在應用程序處于空閑狀態發生的,所以它減輕了對用戶的影響。但是,垃圾收集也會發生在應用程序處在運行裝載的時候,這時候系統將會運行在較低的系統資源下。

另外,我們可以通過編寫代碼來手動觸發垃圾收集處理程序:

System.GC.Collect()

以上這個處理過程要花一些時間,但是我們在想終止對象的時候也不必每次都執行這個處理過程。我們***是這樣來設計我們的應用程序:在***終止對象的時候才將對象從內存在清除。

Finalize方法

這個垃圾收集機理提供了一些功能,這些功能可以跟VB6中的Class_Terminate事件相媲美。當VB.NET對象被終止的時候,垃圾收集處理的代碼將調用Finalize方法,它就象Class_Terminate一樣可以進行一些***的內存清理工作。

  1. Protected Overrides 
    Sub Finalize()  

  2. (此處可以進行一些內存清理工作)  

  3. End Sub 

以上的這些代碼可以使用Protected(保護)作用域也可以使用重載關鍵字。這里值得指出的是,這種方法是在對象被垃圾收集機理終止之前被調用的,所以它跟Class_Terminate很是相似。
但是,我們還需要記得這種方法可以在對象被取消引用后被調用,它是通過***一段客戶代碼來實現的。

實現Dispose方法

在有些場合中Finalize方法是不可接收的。如果我們有一個VB.NET對象,它是使用一些非常有限的寶貴的系統資源,比如數據庫連接、文件處理或者系統鎖住等等。這時候我們就需要確保系統資源在對象被取消引用的時候是否被釋放。

為了實現這個目的,我們可以執行這樣一個方法,它可以被客戶代碼調用來強迫對象被清除并且釋放系統資源。雖然這不是一個很好的解決方案,但是它確實是很有效的。習慣上,這個方法就取名為Dispose,其代碼如下:

Public Sub Dispose()  (此處可以進行一些清除工作)  End Sub

在必要的時候,我們可以調用這個方法來確保內存清除工作的進行。

以上是“VB6和VB.NET在創建類和VB.NET對象的有什么變化”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

称多县| 开化县| 二手房| 连平县| 钟祥市| 邵武市| 深州市| 甘孜| 荥阳市| 西藏| 延津县| 瓦房店市| 武胜县| 衡水市| 洪江市| 台湾省| 玉山县| 小金县| 凤山市| 沧州市| 友谊县| 忻城县| 新田县| 蒙自县| 伊金霍洛旗| 绍兴县| 韶山市| 宁南县| 株洲市| 金溪县| 龙泉市| 左云县| 广元市| 巢湖市| 乌恰县| 汉川市| 长子县| 平南县| 特克斯县| 安仁县| 阿合奇县|