28 9月 2011

[C#] 盡量避免用 Boxing 和 Unboxing

Boxing 某個型態的數值時會包含下列兩個行程
  • 分配一個物件
  • 將該型態的資料複製於物件
根據上述,應該儘量避免使用 Boxing
當使用 ArrayList 時,儘量避免使用 struct 的型態,因為 ArrayList 將會使用
object 來置換 struct 的型態;當程序在迴圈內執行時,Boxing 將會一直發生

而在 Unboxing 時,也會執行下列兩個行程
  • 建置型態
  • 複製資料
// Badstruct st
{
public Int i;
}
Arraylist arr = new ArrayList();
for (int i=0 ; i< 4; i++)
{ 
st s;
s.i = 4; 
arr.add(st) ; // Boxing 
}
st obj = (st ) arr[0]; // Unboxing 

// Good
Class st
{
public Int i;
}
List arr = new List();
for (int i=0 ; i< 4; i++)
{ 
st s;
s.i = 4; 
arr.add(st); 
}
st obj = arr[0];


1 則留言:

  1. There's SHOCKING news in the sports betting world.

    It's been said that any bettor needs to see this,

    Watch this or quit placing bets on sports...

    Sports Cash System - Robotic Sports Betting Software

    回覆刪除