之前也看過一些對string與StringBuilder的性能分析,總感覺這個應該對整體性能不會產生多大的影響,所以就一直沒有關注這塊!
由於學程序初期最先接觸的string拼接,所以就一直沒改變過自己的習慣!
前段時間抽時間寫了一個CMS系統,一開始的時候每秒鍾大概能生成200條新聞,可是后來由於新聞系統與購物系統整合后,發現生成速度突然就掉下來了
最快的時候每秒鍾也就生成130多條新聞,按照正常的情況下不應該會出現這個問題的,於是從后期整合的代碼里面找原因,
由於生成新聞的時候,我們都要提取相關商品的相關信息並輸出,而且這些都是用string進行拼接的,由於拼接的次數比較頻繁,
突然就想到了這個string與StringBuilder的性能的問題,於是我粗略的做了一個小小的測試!
用StringBuilder循環的拼接10000次字符串需要的時間為 0到1毫秒!
代碼如下:
long tt = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));
StringBuilder start = new StringBuilder();
for(int j=0;j<10000;j++)
{
start.Append("測試測試測試測試測試測試測試測試測試測試測試測試");
}
long mm = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));
Response.Write(Convert.ToString( mm-tt));
用string循環的拼接100000次字符串需要的時間為 5500到6000毫秒!
代碼如下:
long tt = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));
string start =string.Empty;
for(int j=0;j<10000;j++)
{
start += "測試測試測試測試測試測試測試測試測試測試測試測試";
}
long mm = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));
Response.Write(Convert.ToString( mm-tt));
我原本用的是100000 次拼接做的測試,StringBuilder僅用了30毫秒,但是用string拼接就執行幾分鍾沒有執行完,所以我就改用10000次來做試驗了!
簡單的可以概括為,string拼接的次數越多,速度則越慢,而StringBuilder則幾乎不怎么變化!
string與StringBuilder的性能問題看上去可能很多人覺得沒什么,但是一旦操作的次數多了,那么速度就很明顯的顯示出來了!
我把所有的關於string的操作都改成了 StringBuilder來操作,再看CMS的生成速度可以達到每秒鍾生成300條新聞了!屬蛇的人2012年運程屬豬的人2012年運程2013年運程2012年運程屬虎的人2012年運程
聲明:我們的CMS是在配置為 windows2003 vps 服務器, 內存為 1G,數據庫為Sqlserver2000,新聞數據量為:20萬的的情況下進行測試的,
這樣基本已經可以滿足我們的要求了!
寫程序注意細節,尤其是在搭建比較大型的項目時,細節可能就決定了成敗!
關於造成這種情況的原因,大家可以參考:http://www.cnblogs.com/csdnit/archive/2012/05/09/2492210.html