doubleが文字列として出力するいくつかの方法の効率テスト
3051 ワード
テスト結果:
double->none 366msdouble->long 161msdouble->long2 188msdouble->format 564msdouble->Round 393ms
コード:
double->none 366msdouble->long 161msdouble->long2 188msdouble->format 564msdouble->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));
}
}
}