如何規(guī)避使用不慎,帶來(lái)的額外的性能開(kāi)銷(xiāo):
1.確保盡量少的裝箱
在自己編寫(xiě)的代碼中,應(yīng)當(dāng)盡可能地避免編寫(xiě)不必要的裝箱代碼。
裝箱操作會(huì)帶來(lái)性能損耗的原因:
a.首先,會(huì)為值類(lèi)型在托管堆中分配內(nèi)存。除了值類(lèi)型本身所分配的內(nèi)存外,內(nèi)存總量還要加上類(lèi)型對(duì)象指針和同步塊索引所占的內(nèi)存。
b.將值類(lèi)型的值賦值到新分配的堆內(nèi)存中。
c.返回已經(jīng)成為引用類(lèi)型的對(duì)象的地址。
2.避免分配額外的內(nèi)存空間
對(duì)CLR來(lái)說(shuō),string對(duì)象是個(gè)很特殊的對(duì)象,它一旦被賦值就不可改變。在運(yùn)行時(shí)調(diào)用System.String類(lèi)中的任何方法或進(jìn)行任何運(yùn)算(如“=”、“+”等),都會(huì)在內(nèi)存中創(chuàng)建一個(gè)新的字符串對(duì)象,要為該新對(duì)象分配新的內(nèi)存空間。
盡量使用StringBuilder進(jìn)行字符串操作,或者使用string.Format方法進(jìn)行字符串操作(string.Format方法內(nèi)部使用StringBuilder進(jìn)行字符串格式化)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注