vb.net變量值被回收 vbscript變量

VB.NET 函數(shù)的返回值

C返回局部變量的值也沒(méi)問(wèn)題啊

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了沙坡頭免費(fèi)建站歡迎大家使用!

只是如果這個(gè)局部變量是指向棧上的內(nèi)存的指針,由于函數(shù)結(jié)束后活動(dòng)棧被清空,會(huì)導(dǎo)致指針失效。

VB.NET不支持指針語(yǔ)法,它不可能返回指向棧上的指針,所以用不著擔(dān)心這個(gè)問(wèn)題。

你的理解

第一點(diǎn)理解是正確的,不過(guò)和這個(gè)問(wèn)題關(guān)系不大。因?yàn)橐妙愋捅緛?lái)就不是分配在棧上的,它當(dāng)然就不受函數(shù)的影響。

第二點(diǎn),那個(gè)只是個(gè)語(yǔ)法問(wèn)題。VB6沒(méi)有Return語(yǔ)句,所以它必然有另外一種語(yǔ)法來(lái)表明函數(shù)的返回值。這個(gè)和函數(shù)能否返回正確的對(duì)象沒(méi)有關(guān)系,就是一種表明函數(shù)返回值的語(yǔ)法。

編譯器確實(shí)定義了一個(gè)和函數(shù)同名的變量,那個(gè)變量就是一個(gè)普通的局部變量,作用域就在函數(shù)的局部域里。這個(gè)變量沒(méi)什么特別的,就是編譯器會(huì)在函數(shù)結(jié)束時(shí)把這個(gè)變量的值作為函數(shù)的返回值返回而已。

VB.net2000的自動(dòng)垃圾回收機(jī)制到底管用么???????!!!!

分類: 電腦/網(wǎng)絡(luò) 程序設(shè)計(jì) 其他編程語(yǔ)言

問(wèn)題描述:

別跟我說(shuō)VB2000自動(dòng)釋放內(nèi)存,曾經(jīng)深信這句話的我,如今已是傷痕累累,好幾個(gè)大項(xiàng)目都差點(diǎn)毀在vb的內(nèi)存問(wèn)題上,C#我倒不知道..VB的回收內(nèi)存速度太慢了,這只是保守的說(shuō),其實(shí)本人認(rèn)為它根本不會(huì)回收內(nèi)存.就算全部用上gc.collet也回收不了,而且越用越慢

在使用我的項(xiàng)目的時(shí)候,隨著窗口的開(kāi)開(kāi)關(guān)關(guān)\控件的調(diào)用,內(nèi)存一直飆,從14MB左右一路瘋狂飆高,40分鐘系統(tǒng)就崩潰了...上了補(bǔ)丁的XP可以不死機(jī),但就定著不動(dòng)了..如果虛擬內(nèi)存文件大,可以維持到撐滿,但錄一條記錄平均要等一個(gè)小時(shí)!!!!!!!,后來(lái)我學(xué)乖了開(kāi)始nothing全局變量(工作量驚人...),結(jié)果內(nèi)存開(kāi)始有下走的現(xiàn)象(原來(lái)是一路向上..只占不放)但內(nèi)存還是呈曲線上飆,40分鐘到200多MB,于是我開(kāi)始釋放局部變量,在每個(gè)方法中都要釋放!!!!!!!!!!!!!!!!!!!!!,而且還要區(qū)分哪些是引用!痛苦啊!!!

...結(jié)果三個(gè)月之后,滿面憔悴的我終于發(fā)現(xiàn)內(nèi)存接近正常了,雖然還不是釋放的很干凈,但能保證在一段時(shí)間內(nèi)不會(huì)崩潰了..至少客戶做的時(shí)候沒(méi)再提過(guò)意見(jiàn)...我并沒(méi)有優(yōu)化什么代碼,只是痛苦的釋放了一些全局和局部變量,結(jié)果內(nèi)存就不消耗的那么厲害了,你說(shuō)奇怪不奇怪..但內(nèi)存始終不是釋放的那么干凈,我算過(guò)了一分鐘內(nèi)曲線飆高2MB左右,有時(shí)更多照這樣一來(lái),真是早死不如晚死,想想將來(lái)還不如用java重新做呢...各位可憐可憐我吧,有什么好主意整理vb2000的內(nèi)存的好東東,就告訴我吧!!!!!!!!!!我真的受不了了!!!!!有沒(méi)有什么方法可以重新分配內(nèi)存呢,就算會(huì)造成頁(yè)中斷我也在所不惜!!!!

另外Me.Refresh()是什么意義,能釋放內(nèi)存么?

解析:

很簡(jiǎn)單,你沒(méi)有正確理解VB的內(nèi)存自動(dòng)回收機(jī)制,仔細(xì)看一下MSDN,好好研究一下相關(guān)的內(nèi)容。其實(shí)JAVA的內(nèi)存自動(dòng)回收機(jī)制與VB是類似的,如果你用VB.NET做不好,換用JAVA照樣做不好。

其實(shí),你已經(jīng)發(fā)現(xiàn)了為什么內(nèi)存不能回收,只是你沒(méi)意識(shí)到罷了。

為什么要用全局變量呢?給你舉個(gè)極端的例子吧:建立一個(gè)全局的Hashtable,然后將程序中創(chuàng)建的每一個(gè)對(duì)象實(shí)例加入到這個(gè)hashtable中,那么你將看到內(nèi)存一直猛增,直到崩潰。

正確的作法是:

1、盡量不用、少用全局變量和靜態(tài)變量

2、如果沒(méi)有必要,就不要把對(duì)象實(shí)例加到全局或靜態(tài)的Hashtable、ArrayList之類的 *** 中去,除非你是想自己建立一個(gè)對(duì)象緩沖池

3、如果你自己要建立對(duì)象緩沖池,就一定要注意對(duì)象的清理,盡早將不用的對(duì)象從池中刪除

4、找本好一點(diǎn)的數(shù)據(jù)結(jié)構(gòu),仔細(xì)學(xué)學(xué)其中關(guān)于自動(dòng)內(nèi)存回收的那幾種機(jī)制,以后在程序中不要違反它們的要求前提條件。

vb.net 內(nèi)存回收機(jī)制。。。。

一般.net的垃圾回收機(jī)制會(huì)在過(guò)程結(jié)束后進(jìn)行垃圾回收,但是垃圾回收是比較消耗系統(tǒng)資源的,所以不可能經(jīng)常被調(diào)用。

如果你需要強(qiáng)制進(jìn)行垃圾回收,可在過(guò)程最后添加如下代碼:

GC.Collect()

強(qiáng)制進(jìn)行垃圾回收

跪求大神指點(diǎn)vb.net 怎么釋放變量在內(nèi)存中的殘留地址值呀

.net 有自己的資源回收機(jī)制GC。

如果變量不再使用了,所有引用該變量的其它變量也都沒(méi)用了(dispose或者賦值為空了),那么這些沒(méi)用的變量會(huì)定時(shí)的被GC自動(dòng)回收,不需要自己去管理。

如果非要自己釋放資源的話,可以使用 GC.Collect() 進(jìn)行釋放,但是并不能保證一次GC.Collect()就可以釋放掉所有沒(méi)有用的資源,可能要經(jīng)過(guò)好幾輪GC.Collect()才能釋放干凈。

所以還是建議不要手動(dòng)回收了,讓系統(tǒng)根據(jù)要求自動(dòng)回收吧。

當(dāng)前題目:vb.net變量值被回收 vbscript變量
標(biāo)題URL:http://www.muchs.cn/article6/dohicog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司網(wǎng)站營(yíng)銷、域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作