C# nesne yönelimli programlama, birçok kullanıcı dostu işlem sınıfı sunar, şimdi bu StringDictionary, dizeleri anahtar ve değer olarak saklamaya uzmanlaşmış bir sınıf koleksiyonu, bu sınıfın anlamı şudur: C#, değer tipindeki dizinin oldukça yaygın olduğunu bilir, diğer değer türleri de karşılık gelen string tiplerine dönüştürülebilir, bu koleksiyonun anlamı budur, ancak yine de başka koleksiyon nesnelerini kullanarak onu değiştirebilirsiniz, ancak bir noktaya dikkat edin, Eğer bu dizi depolama ise, bu bellek kaybını azaltabilir ve programın çalıştırılması için gereken süreyi azaltabilir
SyncRoot, StringDictionary'ye erişimi senkronize etmek için kullanılabilir
Açıkça söylemek gerekirse, bu kilit kavramı, bunu test etmek için bir program yazalım:
Kod şöyledir:
Aynı anda StringDictionary sözlüğüne veri eklemek için iki iş parçacığı var,
İlk iş parçacığı ile ikinci iş parçacığı arasındaki uygulama süresi farkı bir saniyedir; böylece zaman farkı genişletilir ve yürütme çok hızlı olur.
İş parçacıklarının iki yönteme gittiğini görebilirsiniz ve ikinci veri eklendiğinde, ikinci veriyi eklemeden önce ilk verinin eklenmesini beklemişlerdir ve toplama süresi çok hızlıdır.
Aşağıda, anlaşılmasını kolaylaştırmak için farklı bir şekilde yazacağız:
3 iş parçacığı açılır, veri eklenir ve 3 iş parçacığı neredeyse aynı anda çalıştırılır, ancak veri eklendiğinde her biri 10 saniye arayla gerçekleşir.
Özetle, çoklu iş parçacıklı erişimde, iş parçacığı güvenliğini sağlamak için SyncRoot kullanabilirsiniz
|