測試結果:測試
double->none 366ms
double->long 161ms
double->long2 188ms
double->format 564ms
double->Round 393msui
代碼:spa
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace testStringbuilder { class Program { static void Main(string[] args) { const int count = 1000000; RunTest("double->none",()=> { StringBuilder sb = new StringBuilder(1000*1024*32); double a = 3.1415926; for (int i = 0; i < count; i++) { sb.Append(a); sb.Append(','); } }); RunTest("double->long", () => { StringBuilder sb = new StringBuilder(1000 * 1024 * 32); double a = 3.1415926; for (int i = 0; i < count; i++) { sb.Append((long)a); sb.Append(','); } }); RunTest("double->long2", () => { StringBuilder sb = new StringBuilder(1000 * 1024 * 32); double a = 3.1415926; for (int i = 0; i < count; i++) { sb.Append((long)(a * 100)); sb.Append(','); } }); RunTest("double->format", () => { StringBuilder sb = new StringBuilder(1000 * 1024 * 32); double a = 3.1415926; for (int i = 0; i < count; i++) { sb.AppendFormat("{0:f3}",a); sb.Append(','); } }); RunTest("double->Round", () => { StringBuilder sb = new StringBuilder(1000 * 1024 * 32); double a = 3.1415926; for (int i = 0; i < count; i++) { sb.Append(Math.Round(a, 3)); sb.Append(','); } }); } private static void RunTest(string key, Action action) { double milli = 0; for (int i = 0; i < 3; i++) { Stopwatch watch = Stopwatch.StartNew(); try { action(); } catch (Exception ex) { Console.WriteLine(ex); } watch.Stop(); milli += watch.ElapsedMilliseconds; } Console.WriteLine("{0}\t{1}ms", key, (long) (milli/3)); } } }