Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 HybridDictionary 동기화 여부 확인하는 방법

C#에서 HybridDictionary가 동기화(synchronized)되었는지 확인하려면 IsSynchronized 속성을 사용하면 됩니다. 이 속성은 해당 컬렉션에 대한 접근이 동기화되어 스레드로부터 안전한지 여부를 불리언(Boolean) 값으로 반환합니다.

예제 1

두 개의 HybridDictionary를 생성하고 각각의 동기화 상태를 확인하는 예제입니다.

using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
   public static void Main(){
      HybridDictionary dict1 = new HybridDictionary();
      dict1.Add("A", "Books");
      dict1.Add("B", "Electronics");
      dict1.Add("C", "Smart Wearables");
      dict1.Add("D", "Pet Supplies");
      dict1.Add("E", "Clothing");
      dict1.Add("F", "Footwear");
      Console.WriteLine("HybridDictionary1 elements...");
      foreach(DictionaryEntry d in dict1){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      Console.WriteLine("Is the HybridDictionary1 having fixed size? = "+dict1.IsFixedSize);
      Console.WriteLine("If HybridDictionary1 read-only? = "+dict1.IsReadOnly);
      Console.WriteLine("Is HybridDictionary1 synchronized = "+dict1.IsSynchronized);
      HybridDictionary dict2 = new HybridDictionary();
      dict2.Add("1", "One");
      dict2.Add("2", "Two");
      dict2.Add("3", "Three");
      dict2.Add("4", "Four");
      dict2.Add("5", "Five");
      dict2.Add("6", "Six");
      Console.WriteLine("\nHybridDictionary2 elements...");
      foreach(DictionaryEntry d in dict2){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      Console.WriteLine("Is HybridDictionary1 equal to HybridDictionary2? = "+(dict1.Equals(dict2)));
      Console.WriteLine("Is the HybridDictionary2 having fixed size? = "+dict2.IsFixedSize);
      Console.WriteLine("If HybridDictionary2 read-only? = "+dict2.IsReadOnly);
      Console.WriteLine("Is HybridDictionary2 synchronized = "+dict2.IsSynchronized);
   }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

HybridDictionary1 elements...
A Books
B Electronics
C Smart Wearables
D Pet Supplies
E Clothing
F Footwear
Is the HybridDictionary1 having fixed size? = False
If HybridDictionary1 read-only? = False Is HybridDictionary1 synchronized = False

HybridDictionary2 elements...
1 One
2 Two
3 Three
4 Four
5 Five
6 Six
Is HybridDictionary1 equal to HybridDictionary2? = False
Is the HybridDictionary2 having fixed size? = False
If HybridDictionary2 read-only? = False Is HybridDictionary2 synchronized = False

결과 분석

위 예제에서 두 HybridDictionary 모두 IsFixedSize, IsReadOnly, IsSynchronized 속성이 False로 반환된 것을 확인할 수 있습니다. 즉, 기본 생성자로 만든 HybridDictionary는 고정 크기가 아니며 읽기 전용이 아니고, 동기화되어 있지 않습니다. 또한 두 딕셔너리는 저장된 내용이 다르므로 Equals 비교 결과도 False입니다.

예제 2

이번에는 하나의 HybridDictionary만 사용하는 더 간단한 예제를 살펴보겠습니다.

using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
   public static void Main(){
      HybridDictionary dict = new HybridDictionary();
      dict.Add("1", "Finance");
      dict.Add("2", "Marketing");
      dict.Add("3", "IT");
      dict.Add("4", "Operations");
      dict.Add("5", "Purchase");
      Console.WriteLine("HybridDictionary elements...");
      foreach(DictionaryEntry d in dict){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      Console.WriteLine("Is the HybridDictionary having fixed size? = "+dict.IsFixedSize);
      Console.WriteLine("If HybridDictionary read-only? = "+dict.IsReadOnly);
      Console.WriteLine("Is HybridDictionary synchronized = "+dict.IsSynchronized);
   }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

HybridDictionary elements...
1 Finance
2 Marketing
3 IT
4 Operations
5 Purchase
Is the HybridDictionary having fixed size? = False
If HybridDictionary read-only? = False Is HybridDictionary synchronized = False

정리

HybridDictionary는 저장된 요소 수가 적을 때는 내부적으로 ListDictionary처럼 작동하고, 요소가 많아지면 Hashtable로 전환되는 컬렉션입니다. 기본 인스턴스는 동기화되어 있지 않으므로, 멀티스레드 환경에서 안전하게 사용하려면 SyncRoot를 이용해 래핑하거나 별도의 잠금(lock) 처리를 하는 것이 좋습니다.