Объектно-ориентированное программирование на C# предоставляет множество удобных для пользователя классов операций, теперь этот StringDictionary представляет собой собрание классов, специализирующихся на хранении строк как ключей и значений, значение этого класса такова: C# знает, что строка в типе значения довольно широко используется, другие типы значений также могут быть преобразованы в соответствующие типы строк, это и есть смысл этой коллекции, но вы всё равно можете использовать другие объекты коллекции для её замены, но обратите внимание на один момент, Если это строковое хранилище, это может уменьшить потерю памяти и сократить время работы программы
SyncRoot можно использовать для синхронизации доступа к StringDictionary
Говоря прямо, это концепция блокировки, давайте напишем программу для её тестирования:
Код таков:
У нас одновременно два потока для добавления данных в словарь StringDictionary,
Разница во времени выполнения между первым и вторым потоком составляет одну секунду, чтобы увеличить разницу во времени и предотвратить слишком быстрое выполнение.
Вы видите, что потоки перешли к двум методам, и при добавлении второго фрагмента данных они ждали добавления первых данных, прежде чем добавить второй, а время сложения очень быстрое.
Ниже мы напишем это по-другому, чтобы было проще понять:
Открываются 3 потока, добавляются данные, и 3 потока выполняются почти одновременно, но при добавлении данных каждый с интервалом 10 секунд.
В заключение, при многопоточном доступе мы можем использовать SyncRoot для обеспечения безопасности потоков
|