Re: [問題] string封裝的效能問題

看板C_Sharp作者 (.)時間11年前 (2013/03/17 20:03), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串2/2 (看更多)
: 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/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
文章代碼(AID): #1HHR4BID (C_Sharp)
文章代碼(AID): #1HHR4BID (C_Sharp)