[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 を指定すると、戻ってくる値が安全ではないから推奨されないとかなんとか。

このブログの人気の投稿

コピーした行の挿入が表示されない時はフィルタされていないかチェック

Excel で一部の図形だけ固定する