[.NET Resource]透過BoxCop偵測程式是否存在Boxing與UnBoxing


大家都知道在.Net程式中有所謂的 Boxing與UnBoxing,也都知道 Boxing與UnBoxing會讓程式有效能上的損耗,那麼要怎樣才能有效率的抓出程式中的Boxing與UnBoxing呢 ?



以前筆者還沒有比較好的方式,也找不太到現成的FxCop rule。所以是比較笨拙的先將程式組件反組譯成IL碼,再下去查閱box的操作。


image



這樣雖然可以解決問題,但是真的很麻煩,每次都要重新反組譯dump成IL,再去找Boxing與UnBoxing,找到後還要從IL推斷出是哪個程式檔案的哪個位置,才能做修正的動作。



後來筆者找到了BoxCop,問題就變得簡單了許多。(雖然它只能支援.Net Framework 3.5以前的程式,不支援的版本會出現像下圖的錯誤)


image



透過BoxCop ,開發人員只要帶入組件讓BoxCop分析,就可以很容易的找到程式有Boxing與UnBoxing的地方。像是下面這樣一段簡單也算是很常見的程式碼片段,就有著Boxing的動作,因為這邊的範例把數值直接塞到object去了。



using System;

namespace ConsoleApplication25
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“Blog: {0}{1}Article count:{2}”,
“Level Up”,
Environment.NewLine,
549
);
}
}
}



試想著這樣類似的程式碼片佈在你的程式之中會多麼難察覺。還好透過BoxCop來偵測這樣的問題還滿簡單的,運行起來會像下面這樣:


image



是哪個程式檔案、哪個類別、哪一行會有 Boxing與UnBoxing都一清二楚。雖然它的column好像不太準確,但起碼我們可以準確地抓到問題發生的行數,只要再確認一下那行程式哪個運算有問題就可以了。



Link



  • BoxCop – Static Assembly Analyzer tool


  • BoxCop – Static Assembly Analyzer tool