예제 #1
0
        public static void DictionaryTest3(DoubleKeyDictionary <int, int, int> dd,
                                           int s1    = 1000,
                                           int s2    = 10,
                                           int sshow = 8)
        {
            Stopwatch sw  = new Stopwatch();
            Random    r   = new Random();
            int       err = 0;

            sw.Start();
            for (int i = s1; --i >= 0;)
            {
                for (int j = s2; --j >= 0;)
                {
                    if (!dd.Add(i, j, r.Next(0, s1 * s2)))
                    {
                        err++;
                    }
                }
            }
            sw.Stop();

            Console.WriteLine($"{Thread.CurrentThread.Name} - Выборка из набора ({s1*s2} записей):");
            dd.GetItemsByKey1(sshow < s1 ? sshow : 0).Select(x =>
            {
                Console.WriteLine($"{Thread.CurrentThread.Name} - {x.Key.Key1}, {x.Key.Key2}, {x.Value}");
                return(x);
            }).ToList();

            Console.WriteLine($"\r\n{Thread.CurrentThread.Name} - DoubleDictionary by length = {dd.Count}, errors = {err}, at {sw.Elapsed} was created.");
        }
예제 #2
0
        public static void DictionaryTest2(DoubleKeyDictionary <UserKey <Guid>, UserKey <Guid>, int> dd,
                                           int s1    = 10000,
                                           int s2    = 10,
                                           int sshow = 245)
        {
            //Применяю универсальный пользовательский тип для обоих ключей, объекты которого сравниваются по значению

            Stopwatch sw  = new Stopwatch();
            Random    r   = new Random();
            int       err = 0;

            var testKey = new UserKey <Guid>(Guid.Empty);

            sw.Start();
            for (int i = s1; --i >= 0;)
            {
                var key1 = new UserKey <Guid>(Guid.NewGuid());
                //нужен для вывода части словаря (значение i произвольное)
                if (i == sshow)
                {
                    testKey = key1;
                }

                //иногда цикл удобнее оформить на уменьшение..
                for (int j = s2; --j >= 0;)
                {
                    var key = new DoubleKey <UserKey <Guid>, UserKey <Guid> >(
                        key1,
                        new UserKey <Guid>(Guid.NewGuid()));
                    if (!dd.Add(key, r.Next(0, int.MaxValue)))
                    {
                        err++;
                    }
                }
            }
            sw.Stop();

            Console.WriteLine($"{Thread.CurrentThread.Name} - Выборка из набора ({s2} записей):");
            //для демонстрации работы с LINQ
            dd.GetItemsByKey1(testKey).Select(x =>
            {
                Console.WriteLine($"{Thread.CurrentThread.Name} - {x.Key.Key1}, {x.Key.Key2}, {x.Value}");
                return(x);
            }).ToList();

            Console.WriteLine($"\r\n{Thread.CurrentThread.Name} - DoubleDictionary by length = {dd.Count}, errors = {err}, at {sw.Elapsed} was created.");
        }