星期五, 9月 19, 2008

string.format效率測試..

內心一直有個疑慮..如果是在一行字左右的字元來相加..感覺用string.format好像比用+的效率好..不過還是講求證據自己測試一下..TongueTongueTongueTongueTongue..

string temp = string.Empty;
Stopwatch sw = new Stopwatch();

//第一種結果
sw.Start();
for (int i = 0; i <= 1000000; i++)
temp = string.Format("{0}{1}{2}{3}", "0", "1", "2", "3");
sw.Stop();
Response.Write(string.Format("跑10000次要花: {0} 秒 用string.formate函式<br />"
, sw.Elapsed.Milliseconds / 1000d));

sw.Reset();

//第二種結果
sw.Start();
for (int i = 0; i <= 1000000; i++)
temp = "0" + "1" + "2" + "3";
sw.Stop();
Response.Write(string.Format("跑10000次要花: {0} 秒 用+字元<br />"
, sw.Elapsed.Milliseconds / 1000d));

結果:
dvcd

結果是我之前的觀念是不對..理論上經過函式的"揉爛"當然效率會變慢啦..要改要改..At wits endAt wits endAt wits end..

參考:
http://msdn.microsoft.com/zh-tw/library/system.string.format(VS.80).aspx

4 則留言:

克勞迪奧~ 提到...

因為string.format要跑
public static string Format(IFormatProvider provider, string format, params object[] args)
{
if ((format == null) || (args == null))
{
throw new ArgumentNullException((format == null) ? "format" : "args");
}
StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
builder.AppendFormat(provider, format, args);
return builder.ToString();
}

你覺得會快嗎XD?

Bibby 提到...

感謝指教~又多學一招了~^^~

Lozen 提到...

 偶然路過版主的這篇文章,因為我也很愛用string.format,所以我也手癢測試了一下,雖然結果string.format還是比較慢,但是發現這個測試碼有個問題:
temp="0"+"1"+"2"+"3";
這行似乎在編譯的時候就被合成temp="0123";,所以才會只花0.003秒,
如果改寫成變數相加,
string str="0";
temp=str+str+str+str;
我測試的差別會從0.00003秒變成0.0027秒,同時string.format的為0.0065秒。
(不過我看版主的新文章還是用了很多string.format,也許早就知道效率不是差200多倍了吧)
p.s. 另外有個有趣的數字,一個int.ToString()花了0.0015秒。

Bibby 提到...

Lozen
謝謝您的測試..^^..又學到一招啦..肝溫..