Enum.IsDefinedのパフォーマンス
たまにはC#の小ネタで。
Enum.IsDefinedによるチェックですが、
using System; using System.Diagnostics; public enum MyEnum { X, Y, Z = 99, } class Program { private const int LOOP = 10000000; static bool IsDefined(MyEnum e) { switch (e) { case MyEnum.X: case MyEnum.Y: case MyEnum.Z: break; default: return false; } return true; } static void Main(string[] args) { var sw = new Stopwatch(); sw.Start(); for (int i = 0; i < LOOP; ++i) Enum.IsDefined(typeof(MyEnum), 99); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); sw.Reset(); sw.Start(); for (int i = 0; i < LOOP; ++i) IsDefined((MyEnum)99); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); } } /* 結果 8459 71 */
ちまちま実装した方がかなり速いです。これは、Enum.IsDefinedの実装がReflectionを使っている所為らしいです。