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."); }
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."); }