C返回局部變量的值也沒問題啊

網站建設哪家好,找創新互聯!專注于網頁設計、網站建設、微信開發、微信小程序定制開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了沙坡頭免費建站歡迎大家使用!
只是如果這個局部變量是指向棧上的內存的指針,由于函數結束后活動棧被清空,會導致指針失效。
VB.NET不支持指針語法,它不可能返回指向棧上的指針,所以用不著擔心這個問題。
你的理解
第一點理解是正確的,不過和這個問題關系不大。因為引用類型本來就不是分配在棧上的,它當然就不受函數的影響。
第二點,那個只是個語法問題。VB6沒有Return語句,所以它必然有另外一種語法來表明函數的返回值。這個和函數能否返回正確的對象沒有關系,就是一種表明函數返回值的語法。
編譯器確實定義了一個和函數同名的變量,那個變量就是一個普通的局部變量,作用域就在函數的局部域里。這個變量沒什么特別的,就是編譯器會在函數結束時把這個變量的值作為函數的返回值返回而已。
分類: 電腦/網絡 程序設計 其他編程語言
問題描述:
別跟我說VB2000自動釋放內存,曾經深信這句話的我,如今已是傷痕累累,好幾個大項目都差點毀在vb的內存問題上,C#我倒不知道..VB的回收內存速度太慢了,這只是保守的說,其實本人認為它根本不會回收內存.就算全部用上gc.collet也回收不了,而且越用越慢
在使用我的項目的時候,隨著窗口的開開關關\控件的調用,內存一直飆,從14MB左右一路瘋狂飆高,40分鐘系統就崩潰了...上了補丁的XP可以不死機,但就定著不動了..如果虛擬內存文件大,可以維持到撐滿,但錄一條記錄平均要等一個小時!!!!!!!,后來我學乖了開始nothing全局變量(工作量驚人...),結果內存開始有下走的現象(原來是一路向上..只占不放)但內存還是呈曲線上飆,40分鐘到200多MB,于是我開始釋放局部變量,在每個方法中都要釋放!!!!!!!!!!!!!!!!!!!!!,而且還要區分哪些是引用!痛苦啊!!!
...結果三個月之后,滿面憔悴的我終于發現內存接近正常了,雖然還不是釋放的很干凈,但能保證在一段時間內不會崩潰了..至少客戶做的時候沒再提過意見...我并沒有優化什么代碼,只是痛苦的釋放了一些全局和局部變量,結果內存就不消耗的那么厲害了,你說奇怪不奇怪..但內存始終不是釋放的那么干凈,我算過了一分鐘內曲線飆高2MB左右,有時更多照這樣一來,真是早死不如晚死,想想將來還不如用java重新做呢...各位可憐可憐我吧,有什么好主意整理vb2000的內存的好東東,就告訴我吧!!!!!!!!!!我真的受不了了!!!!!有沒有什么方法可以重新分配內存呢,就算會造成頁中斷我也在所不惜!!!!
另外Me.Refresh()是什么意義,能釋放內存么?
解析:
很簡單,你沒有正確理解VB的內存自動回收機制,仔細看一下MSDN,好好研究一下相關的內容。其實JAVA的內存自動回收機制與VB是類似的,如果你用VB.NET做不好,換用JAVA照樣做不好。
其實,你已經發現了為什么內存不能回收,只是你沒意識到罷了。
為什么要用全局變量呢?給你舉個極端的例子吧:建立一個全局的Hashtable,然后將程序中創建的每一個對象實例加入到這個hashtable中,那么你將看到內存一直猛增,直到崩潰。
正確的作法是:
1、盡量不用、少用全局變量和靜態變量
2、如果沒有必要,就不要把對象實例加到全局或靜態的Hashtable、ArrayList之類的 *** 中去,除非你是想自己建立一個對象緩沖池
3、如果你自己要建立對象緩沖池,就一定要注意對象的清理,盡早將不用的對象從池中刪除
4、找本好一點的數據結構,仔細學學其中關于自動內存回收的那幾種機制,以后在程序中不要違反它們的要求前提條件。
一般.net的垃圾回收機制會在過程結束后進行垃圾回收,但是垃圾回收是比較消耗系統資源的,所以不可能經常被調用。
如果你需要強制進行垃圾回收,可在過程最后添加如下代碼:
GC.Collect()
強制進行垃圾回收
.net 有自己的資源回收機制GC。
如果變量不再使用了,所有引用該變量的其它變量也都沒用了(dispose或者賦值為空了),那么這些沒用的變量會定時的被GC自動回收,不需要自己去管理。
如果非要自己釋放資源的話,可以使用 GC.Collect() 進行釋放,但是并不能保證一次GC.Collect()就可以釋放掉所有沒有用的資源,可能要經過好幾輪GC.Collect()才能釋放干凈。
所以還是建議不要手動回收了,讓系統根據要求自動回收吧。
當前題目:vb.net變量值被回收 vbscript變量
標題URL:http://www.yijiale78.com/article6/dohicog.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、外貿建站、網站建設、網站設計公司、網站營銷、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯