Об'єктно-орієнтоване програмування C# надає багато зручних класів операцій, цей StringDictionary — це колекція класів, які спеціалізуються на зберіганні рядків як ключів і значень, значення цього класу таке: C# знає, що рядок у типі значення досить широко використовується, інші типи значень також можуть бути конвертовані у відповідні типи рядків, це і є значення цієї колекції, але ви все одно можете використовувати інші об'єкти колекції для її заміни, але зверніть увагу на один момент, Якщо це сховище рядків, це може зменшити втрату пам'яті та скоротити час запуску програми
SyncRoot можна використовувати для синхронізації доступу до StringDictionary
Говорячи прямо, це концепція блокування, давайте напишемо програму для його тестування:
Код виглядає так:
У нас одночасно є два потоки для додавання даних до словника StringDictionary,
Різниця у часі виконання між першим і другим потоком становить одну секунду, щоб збільшити різницю у часі та запобігти надто швидкому виконанню.
Ви можете побачити, що потоки перейшли до двох методів, і при додаванні другого фрагмента даних вони чекали на додавання перших даних перед додаванням других, а час додавання дуже швидкий.
Нижче ми напишемо це інакше, щоб було легше зрозуміти:
Відкриваються 3 потоки, додаються дані, і три потоки виконуються майже одночасно, але при додаванні даних кожен з інтервалом у 10 секунд.
Підсумовуючи, при багатопотоковому доступі ми можемо використовувати SyncRoot для забезпечення безпеки потоків
|