Re: [問題] string封裝的效能問題
: string str = ((int)(x / (x + y) * 100)) + "%";
: 就是很單純的沒有加上.ToString()
: 前面的數字會被隱含轉換成string,
: 依然可以做成要求的數字,這樣寫法的裝箱次數又是幾次?
既然你那麼好奇的話 就跟你說一個殘酷的結果
測試執行1千萬次 (注意喔 是1千萬次...)
跑了好多次的數據測試
反來是你自已以為會快點的寫法慢了一點點
cost : 1.272
cost : 1.334
老實說執著於benchmark的人比較容易發生於兩種人身上
一種是新手
一種是因為某些問題不得不下去優化的人
說真的如果不是需要 真的不需要浪費時間在這方面
特別是C#有些特性很奇怪
有時候一些看起來很聰明的非通例寫法反來會比較慢
笨寫法反來快 真的很難說
另外更有趣的一點是 高階層層的物件包裝
也常常跟效能有所違背 看你是要程式良好的風格重要 優點好維護
還是把高階物件化語言搞到像C那樣 如果真的都要計較效能
乾脆換別的語言比較好 其實也不是任何程式都需要多高的效能
夠用就好 我覺得
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace TESTCASE
{
class Program
{
static void Main(string[] args)
{
string str;
Stopwatch st = new Stopwatch();
st.Restart();
for(int i = 0 ; i<= 10000000 ; i++)
str = ((int)( i / (i + 100.0) * 100)).ToString() + "%";
st.Stop();
Console.WriteLine("cost : {0}", st.ElapsedMilliseconds / 1000.0 );
st.Restart();
for (int i = 0; i <= 10000000; i++)
str = ((int)(i / (i + 100.0) * 100)) + "%";
st.Stop();
Console.WriteLine("cost : {0}", st.ElapsedMilliseconds / 1000.0 );
Console.ReadKey();
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.70.79.227
推
03/17 20:23, , 1F
03/17 20:23, 1F
→
03/18 07:54, , 2F
03/18 07:54, 2F
推
03/18 11:35, , 3F
03/18 11:35, 3F
→
03/18 11:35, , 4F
03/18 11:35, 4F
討論串 (同標題文章)