我們知道,使用string.Format方法可能會存在裝箱的情況。比如如下:
static void Main(string[] args){string s = string.Format("拼接{0}和{1}", 1, 2);Console.WriteLine(s);Console.ReadKey();}
string.Format()方法接收的後兩個形參類型是object,所以這裡存在裝箱。
現在查看IL代碼:
→打開"開發人員命令提示"
→導航到應用程序所在的文件夾
→使用ildasm查看應用程序的il代碼並輸出到txt文件
→打開1.txt文本文件
→在IL代碼中看到了2次裝箱
如果在我們的應用程序中多次頻繁地調用string.Format方法,比如記錄日志,那麼對值類型裝箱發生了很多次,也意味著會產生很多次的內存分配,發生很多次的垃圾回收。
如何解決呢?
--用字符串拼接
修改代碼如下:
static void Main(string[] args){string s = "拼接" + 1.ToString() + "和" + 2.ToString();Console.WriteLine(s);Console.ReadKey();}
我們看到,通過字符串拼接,避免了裝箱的發生。