1: enum Place
2: { 3: Home, 4: Work, 5: Neither, 6: End = Neither 7: } 8: 9: static Dictionary<string, Place> dictionaryPlaces = null;
10: 11: static void Main(string[] args)
12: {13: const string sHome = "Home";
14: const string sWork = "Work";
15: const string sNeither = "Neither";
16: const string sEnd = "End";
17: 18: if (!Stopwatch.IsHighResolution) { throw new Exception("No high resolution timer! :("); }
19: Stopwatch zStopwatch = Stopwatch.StartNew(); 20: dictionaryPlaces = new Dictionary<string, Place>();
21: dictionaryPlaces.Add(sHome, Place.Home); 22: dictionaryPlaces.Add(sWork, Place.Work); 23: dictionaryPlaces.Add(sNeither, Place.Neither); 24: dictionaryPlaces.Add(sEnd, Place.End); 25: zStopwatch.Stop();26: Console.WriteLine("Dictionary Creation: " + zStopwatch.ElapsedTicks);
27: 28: for (int nIdx = 0; nIdx < 2; nIdx++)
29: {30: Console.WriteLine(Environment.NewLine + "--Dictionary Lookup");
31: LookupEnumByDictionary(sHome); 32: LookupEnumByDictionary(sWork); 33: LookupEnumByDictionary(sNeither); 34: LookupEnumByDictionary(sEnd); 35: 36: Console.WriteLine(Environment.NewLine + "--Enum Lookup");
37: LookupEnum(sHome); 38: LookupEnum(sWork); 39: LookupEnum(sNeither); 40: LookupEnum(sEnd); 41: } 42: Console.ReadLine(); 43: } 44: 45: static void LookupEnumByDictionary(string sValue)
46: { 47: Stopwatch zStopwatch = Stopwatch.StartNew(); 48: Place ePlace = dictionaryPlaces[sValue]; 49: zStopwatch.Stop();50: Console.WriteLine(ePlace.ToString() + "(" + zStopwatch.ElapsedTicks + ")");
51: } 52: 53: static void LookupEnum(string sValue)
54: { 55: Stopwatch zStopwatch = Stopwatch.StartNew();56: Place ePlace = (Place)Enum.Parse(typeof(Place), sValue);
57: zStopwatch.Stop();58: Console.WriteLine(ePlace.ToString() + "(" + zStopwatch.ElapsedTicks + ")");
59: }Here's the output:
Dictionary Creation: 15315
--Dictionary Lookup
Home(4218)
Work(10)
Neither(2)
Neither(1)
--Enum Lookup
Home(10)
Work(5)
Neither(5)
Neither(4)
--Dictionary Lookup
Home(2)
Work(1)
Neither(1)
Neither(1)
--Enum Lookup
Home(5)
Work(5)
Neither(4)
Neither(5)
The initial hits of the Dictionary construction and initial query are large but if you have a program performing a lot of string to enumeration values the Dictionary would result in the best performance over time. I added the second pass through the loop as I guessed it might further reveal the likely pattern.
No comments:
Post a Comment