116 lines
4.8 KiB
C#
116 lines
4.8 KiB
C#
using System.Collections;
|
||
using System.Collections.Concurrent;
|
||
using System.Collections.Specialized;
|
||
using System.Diagnostics;
|
||
|
||
class Program
|
||
{
|
||
/// <summary>
|
||
/// Стандартный Dictionary
|
||
/// Быстрый поиск с помощью ключей, можно добавлять и удалять элементы
|
||
/// </summary>
|
||
private static readonly Dictionary<string, object> Dictionary = new();
|
||
|
||
/// <summary>
|
||
/// ListDictionary
|
||
/// Он меньше и быстрее, чем Hashtable если количество элементов равно 10 или меньше
|
||
/// </summary>
|
||
private static readonly ListDictionary LDictionary = new()
|
||
{
|
||
{ "key", "value"}
|
||
};
|
||
|
||
/// <summary>
|
||
/// HybridDictionary
|
||
/// Рекомендуется для случаев, когда количество элементов в словаре неизвестно.
|
||
/// Он использует улучшенную производительность ListDictionary с небольшими коллекциями
|
||
/// и предлагает гибкость переключения на Hashtable , которая обрабатывает большие коллекции лучше
|
||
/// </summary>
|
||
private static readonly HybridDictionary HDictionary = new()
|
||
{
|
||
{ "key", "value"}
|
||
};
|
||
|
||
/// <summary>
|
||
/// OrderedDictionary
|
||
/// Он всегда упорядочен при выводе foreach
|
||
/// Ключ не может быть нулевым , но значение может быть.
|
||
/// Каждый элемент представляет собой пару ключ/значение, хранящуюся в объекте DictionaryEntry
|
||
/// Доступ к элементам возможен либо по ключу, либо по индексу.
|
||
/// [!]
|
||
/// если элементов больше 20-ти быстрее при цикле for
|
||
/// если элементов меньше 15-20 быстрее в foreach чем for
|
||
/// </summary>
|
||
private static readonly OrderedDictionary ODictionary = new()
|
||
{
|
||
{"01", "odin"},
|
||
{"02", "dva"},
|
||
{"03", "tri"},
|
||
{"04", "chetiri"},
|
||
{"06", "pyat"},
|
||
{"07", "pyat"},
|
||
{"08", "pyat"},
|
||
{"09", "pyat"},
|
||
{"10", "pyat"},
|
||
{"11", "pyat"},
|
||
{"12", "pyat"},
|
||
{"13", "pyat"},
|
||
{"14", "pyat"},
|
||
{"15", "pyat"},
|
||
{"16", "pyat"},
|
||
{"17", "pyat"},
|
||
{"18", "pyat"},
|
||
{"19", "pyat"},
|
||
{"20", "pyat"},
|
||
{"21", "pyat"},
|
||
{"22", "pyat"},
|
||
{"23", "pyat"},
|
||
{"24", "pyat"},
|
||
{"25", "pyat"},
|
||
{"26", "pyat"},
|
||
{"27", "pyat"},
|
||
{"28", "pyat"},
|
||
{"29", "pyat"},
|
||
{"30", "pyat"},
|
||
{"31", "pyat"}
|
||
};
|
||
|
||
|
||
/// <summary>
|
||
/// SortedDictionary
|
||
/// Дерево бинарного поиска, в котором все элементы отсортированы на основе ключа
|
||
/// Быстрее вставляет и удаляет элементы
|
||
/// </summary>
|
||
private static readonly SortedDictionary<int, string> SDictionary = new();
|
||
|
||
/// <summary>
|
||
/// ConcurrentDictionary
|
||
/// Потокобезопасная коллекция пар "ключ-значение", доступ к которой могут одновременно получать несколько потоков.
|
||
/// по умолчанию 4 потока на запись concurrencyLevel = 4
|
||
/// первоначальное число элементов 31 сapacity = 31
|
||
/// В отличие от обычного Dictionary, можно производить вставку в ConcurrentDictionary или удаление из него прямо во время перечисления
|
||
/// </summary>
|
||
private static readonly ConcurrentDictionary<int, string> СoncurrentDictionary = new();
|
||
|
||
static void Main()
|
||
{
|
||
Stopwatch stopwatch = new Stopwatch();
|
||
stopwatch.Start();
|
||
for(int i = 0; i < ODictionary.Count; i++)
|
||
{
|
||
string val = (string)ODictionary[i];
|
||
Console.WriteLine(val);
|
||
}
|
||
stopwatch.Stop();
|
||
Console.WriteLine("[for][el > 20]: " + stopwatch.Elapsed);
|
||
stopwatch.Reset();
|
||
stopwatch.Start();
|
||
foreach (DictionaryEntry item in ODictionary)
|
||
{
|
||
Console.WriteLine(item.Value);
|
||
}
|
||
stopwatch.Stop();
|
||
Console.WriteLine("[foreach][el > 20]: " + stopwatch.Elapsed);
|
||
Console.ReadKey();
|
||
}
|
||
} |