-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
124 lines (115 loc) · 5.01 KB
/
Program.cs
File metadata and controls
124 lines (115 loc) · 5.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
* Author: Nikolay Dvurechensky
* Site: https://dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 27 апреля 2026 09:40:39
* Version: 1.0.254
*/
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();
}
}