double在输出为字符串的几种方法效率测试

时间:2024-11-11 09:07:08

测试结果:

double->none 366ms
double->long 161ms
double->long2 188ms
double->format 564ms
double->Round 393ms

代码:

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));
}
}
}