雖然 gc 可以幫助我們很好的管理記憶體,並且高效的將用不到的物件清理出去,但是這並不意味著我們可以隨意建立物件。尤其是在方法中建立很多區域性引用物件很有可能會降低程式的效能。 gc 的執行時機與程式所分配的記憶體數量以及分配的頻率有關係,如果總是分配記憶體就會給 gc 造成很大的壓力,從而使得 gc 會執行的很頻繁進而降低了程式的效能。一般來說我們會將實現了 idisposable 介面的型別中的變數提公升為成員變數,而非區域性變數,並且在類中實現這個介面(這種多用於區域性變數是引用型別,且出現在需要頻繁執行的 routine 中)。此外,如果在程式中有很多地方都需要用到某個引用型別的例項的話,我們就可以將它設定為靜態成員變數,這樣只有在第一次呼叫它時才會將其建立出來,以後每次的呼叫都不會再建立它,直到沒有任何地方使用到它後 gc 會將其**。這種方法雖好,但是也存在一定的風險,有可能會導致物件在記憶體中呆的時間很久,還意味著開發人員無法釋放非託管資源,因為開發人員並不能確定什麼時候呼叫 dispose 方法。
這裡要單獨提一下 string ,string 型別是不可變的,在我們建立完字串後這個字串就無法再修改,當我們利用 += 操作符對 string 型別的物件進行拼接並賦值的時候,其實執行的時建立物件並將原來的 string 物件的值以及要拼接的值作為乙個整體賦值給新建立的物件,這樣原先的 string 物件就變為了垃圾,看似這種沒問題其實在進行大量字串拼接的時候會嚴重影響到系統的效能。要解決這個問題我們有兩種方式,一種是我曾今講過的內插字串來實現字串拼接,另一種是利用 stringbuild 類,stringbuild 是一種可變的字串它提供了針對字串的修改機制。我們在開發中可以根據 stringbuild 的這個設計思路來設計我們的 build ,令開發人員可以分階段的來建立不可變型別。
總結本篇文章是比較簡單的,但是是乙個比較重要的內容,好多開發人員會在這個地方摔倒,爬起來後也不知道為什麼摔倒。
tip 喵叔推薦優質課
無所謂了嗎?
每個月或者每隔一段時間,我就會開始煩惱。我就開始想要離開身邊的這個人,也許是我太愛對比了吧,也許是我怕吃苦,又或許是我不夠愛這個人,總之這些都是我不想承認的。有時候真的好想離開他,不知道為什麼。就是覺得他哪都不好了,人邋遢,又懶惰,生活習慣和我那麼不一樣。可能最大的原因是不安全感吧,總覺得他給不了我...
孤獨的人總說無所謂
昨晚下班後去五台山游泳。暮色濛濛中,班車從公司流入下班高潮的車水馬龍的 大街上。沿路的華麗燦爛陳列著甜美和幻象。突然就不想去游泳了,特別是當班車在乙個十字路口左轉 的時候,我覺得我好像是應該去右轉的某個地方的 可是我也不知道右轉是要去哪。最近就是這樣,特別是這個季節,好比我正在做或者 打算去做一件事...
我的眼淚你無所謂
記得有人說過 當你的眼淚忍不住要流出來的時候,睜大眼睛,千萬別眨眼,你會看到世界由清晰到模糊的全過程,心,在眼淚落下的那一刻變得清澈明晰!你儘管說吧,說你愛我或者不愛 你儘管去選擇那些難懂的字句,把它們反反覆覆地排列開來 你儘管說吧,你的心情我都會明白 你儘管變吧,變得快樂或者冷漠 你儘管去試戴所有...