型態轉換的性能(long.parse vs ToString)

寫在前面

在工作上或是在系統開發上,時常會遇到轉型的問題,在小型系統上轉型對系統的負荷微乎其微,但是在巨大交易量的系統上面,就顯的重要了!在許多的1毫秒的累積會讓系統減少許多的交易,正好最近再處理系統的效能調教的問題,面臨到了這個問題順手筆記起來,以免再重新測試一次!
另外,本篇文章針對long轉型ToString跟string轉型為long的比較,但相近的int, byte, decimal等等一樣可以適用喔!

比較一:將long個位數的值轉換成為string

測試的方式是宣告一個long型態的變數,執行100000次ToString的method所花費的時間約 8 ms ~ 12 ms !

1
2
3
4
5
6
7
8
9
var longType = 1L;
var sw = Stopwatch.StartNew();
for(var i=0;i<=100000;i++)
{
longType.ToString();
}
Console.WriteLine(sw.Elapsed);
Console.WriteLine(sw.ElapsedMilliseconds);
將long個位數的值轉換成為string
將long個位數的值轉換成為string

比較二:將string轉換成為long

這一次是宣告一個一字元的字串轉換成為long,並且執行100000次的long.Parse所需要的時間約 9 ms ~ 17 ms!
在這兩次的比較差距並不多,但在實際使用的情況很少會用long存放1的資料,所以我們在測試使用1000000的數值,來做測試

1
2
3
4
5
6
7
8
9
var str = "1";
var sw = Stopwatch.StartNew();
for(var i=0;i<=100000;i++)
{
long.Parse(str);
}
Console.WriteLine(sw.Elapsed);
Console.WriteLine(sw.ElapsedMilliseconds);

將string轉換成為long
將string轉換成為long

比較三:將1M轉換為字串

這次使用一百萬的數值轉換成字串,所花費的時間為12 ms ~19 ms!

1
2
3
4
5
6
7
8
9
var varb = 1000000L;
var sw = Stopwatch.StartNew();
for (var i = 0; i <= 100000; i++)
{
varb.ToString();
}
Console.WriteLine(sw.Elapsed);
Console.WriteLine(sw.ElapsedMilliseconds);
將1M轉換為字串
將1M轉換為字串

比較四:將”1000000”轉換成為long

這次使用一百萬的數值轉換成字串,所花費的時間為13 ms ~21 ms!

1
2
3
4
5
6
7
8
9
var varb = "1000000";
var sw = Stopwatch.StartNew();
for (var i = 0; i <= 100000; i++)
{
long.Parse(varb);
}
Console.WriteLine(sw.Elapsed);
Console.WriteLine(sw.ElapsedMilliseconds);
將1M轉換為字串
將1M轉換為字串

在時間上沒有相差很多,但long轉換成為string的效能仍然比較好!千萬不要小看這微小的差距,魔鬼永遠藏在細節中!另外轉換成long在所花費的時間也比較浮動。