Exemplo n.º 1
0
        public void MeasureDictionary()
        {
            var             an = new AssemblyName("temp");
            AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
            ModuleBuilder   moduleBuilder   = assemblyBuilder.DefineDynamicModule("MainModule");
            var             dict1           = new Dictionary <string, Action>();
            var             dict2           = new Dictionary <Guid, Action>();
            var             dict3           = new Dictionary <Type, Action>();
            int             iterations      = 100000 / 4;
            var             keys1           = new string[iterations];
            var             keys2           = new Guid[iterations];
            var             keys3           = new Type[iterations];

            //var duplicateKeys = keys3.GroupBy(x => x)
            //            .Where(group => group.Count() > 1)
            //            .Select(group => group.Key);
            //Console.WriteLine(duplicateKeys.Count());
            for (var i = 0; i < iterations; ++i)
            {
                keys1[i] = i.ToString();
                keys2[i] = Guid.NewGuid();
                TypeBuilder tb = moduleBuilder.DefineType($"Class{i}",
                                                          TypeAttributes.Public |
                                                          TypeAttributes.Class |
                                                          TypeAttributes.AutoClass |
                                                          TypeAttributes.AnsiClass |
                                                          TypeAttributes.BeforeFieldInit |
                                                          TypeAttributes.AutoLayout,
                                                          null);
                keys3[i] = tb.CreateType();
            }
            Stopwatch stopwatch;

            stopwatch = Stopwatch.StartNew();
            for (var i = 0; i < iterations; ++i)
            {
                _hash = keys1[i].GetHashCode();
            }
            Console.WriteLine($"string hash {stopwatch.Elapsed.ToEnglishString()} {iterations} iterations");
            stopwatch = Stopwatch.StartNew();
            for (var i = 0; i < iterations; ++i)
            {
                _hash = keys2[i].GetHashCode();
            }
            Console.WriteLine($"Guid hash {stopwatch.Elapsed.ToEnglishString()} {iterations} iterations");
            stopwatch = Stopwatch.StartNew();
            for (var i = 0; i < iterations; ++i)
            {
                _hash = keys3[i].GetHashCode();
            }
            Console.WriteLine($"Type hash {stopwatch.Elapsed.ToEnglishString()} {iterations} iterations");
            //return;
            stopwatch = Stopwatch.StartNew();
            for (var i = 0; i < iterations; ++i)
            {
                dict1.Add(keys1[i], () => { });
            }
            Console.WriteLine($"string key {stopwatch.Elapsed.ToEnglishString()} {iterations} iterations");
            stopwatch = Stopwatch.StartNew();
            for (var i = 0; i < iterations; ++i)
            {
                dict2.Add(keys2[i], () => { });
            }
            Console.WriteLine($"Guid key {stopwatch.Elapsed.ToEnglishString()} {iterations} iterations");
            stopwatch = Stopwatch.StartNew();
            for (var i = 0; i < iterations; ++i)
            {
                dict3.Add(keys3[i], () => { });
            }
            Console.WriteLine($"Type key {stopwatch.Elapsed.ToEnglishString()} {iterations} iterations");
        }