Pages

2012/05/16

[C#] enum の ToString() は確かに遅いが……

enum (列挙型) の ToString() メソッドは、確かに遅い。遅いんだが、何十万回と繰り返した時にその差がはっきりするわけで、そんなにループするような処理は現実的ではない。それでもまぁ、パフォーマンスが良い方を選択するのが良き実装者という感じか。
 using System.Diagnostics;

 Stopwatch sw = new Stopwatch();
 sw.Start();
 for (int i = 0; i < 100000; i++)
 {
     string s = SampleNames.hans.GetDisplay();
 }
 sw.Stop();
 long millisec = sw.ElapsedMilliseconds;
 Debug.WriteLine("拡張メソッド : " + millisec.ToString() + "ミリ秒");

 sw.Start();
 for (int i = 0; i < 100000; i++)
 {
     string s = SampleNames2.ジョン.ToString();
 }
 sw.Stop();
 millisec = sw.ElapsedMilliseconds;
 Debug.WriteLine("ToString() : " + millisec.ToString() + "ミリ秒");

 // 出力結果
 // 拡張メソッド : 1ミリ秒
 // ToString() : 75ミリ秒
数値だけ見ると、たしかに遅い (笑) 。
あとは、enum が日本語名の変数にしないと名前が取れないので、スマートではないように見えるという主観的な話だけか。


ただ最近は、インテリセンスに 「使用しないでください」 と出るのね。
FlagsAttribute を指定すると、戻ってくる値が安全ではないから推奨されないとかなんとか。
Related Posts Plugin for WordPress, Blogger...