41

SynchronizedCollection<T>System.Collections.Concurrent 네임 스페이스의 동시 수집은 동시 모음이 네임 스페이스이고 SynchronizedCollection<T>이 클래스가 아닌 경우 어떻게됩니까?SynchronizedCollection <T>과 다른 동시 수집의 차이점은 무엇입니까?

SynchronizedCollection<T> 및 동시 컬렉션의 모든 클래스는 스레드로부터 안전한 컬렉션을 제공합니다. 어떻게 다른 것을 사용할 지 결정하는 이유는 무엇입니까?

+1

여기를 보라 :

MSDN에이 문서는 가치가 읽기 또한 http://stackoverflow.com/questions/1946520/why-are-there-no-concurrent-collections-in-c – StuartLC

답변

50

SynchronizedCollection<T> class은 .NET 2.0에서 처음 소개되었으며 스레드로부터 안전한 컬렉션 클래스를 제공합니다. 잠금을 통해이 작업을 수행하므로 모든 액세스가 lock 문으로 묶여있는 List<T>이 있어야합니다.

System.Collections.Concurrent 네임 스페이스가 훨씬 새로운 이름입니다. .NET 4.0까지는 소개되지 않았으며 실질적으로 개선되고 다양한 선택 항목을 포함합니다. 이러한 클래스는 더 이상 스레드 안전성을 제공하기 위해 잠금을 사용하지 않으므로 여러 스레드가 동시에 데이터에 액세스하는 상황에서 더 잘 확장되어야합니다. 그러나, 이러한 옵션 중에는 IList<T> 인터페이스를 구현하는 클래스가 빠져 있습니다.

.NET Framework 4.0 버전을 대상으로하는 경우 가능하면 항상 System.Collections.Concurrent 네임 스페이스에서 제공하는 컬렉션 중 하나를 사용해야합니다. System.Collections.Generic namespace에서 제공되는 다양한 유형의 컬렉션 중에서 선택하는 것과 마찬가지로 특정 요구 사항에 가장 적합한 기능과 특성을 갖춘 컬렉션을 선택해야합니다.

이전 버전의 .NET Framework를 대상으로하거나 IList<T> 인터페이스를 구현하는 컬렉션 클래스가 필요한 경우 SynchronizedCollection<T> 클래스를 선택해야합니다. When to Use a Thread-Safe Collection

+0

그래서 SynchrinozedCollecction보다 System.Collections.Concurrent를 선호 할 수 있습니다. 버전 4.0을 사용 중입니다! – Batrickparry

+1

이러한 새로운 동시 콜렉션이 스레드 안전을 위해 잠금을 사용하지 않는 경우 병행 성은 어떻게 달성됩니까? – Matt

+2

@Matt : 다양한 방법. 그 대답은 아마도 자신의 질문에 공헌하기에 충분히 복잡 할 것입니다. 그러나 영감을 얻으려면 여기를보십시오. http://stackoverflow.com/questions/1688870/how-might-a-class-like-nets-concurrentbagt-be-implemented 여기 : http://stackoverflow.com/questions/4785622/why-is-concurrentbagt-so-slow-in-net-4-0-am-i-doing-it-wrong (또한 링크 된 MSDN 기사를 읽었습니까? 트릭을 사용하는 것보다는 잠금을 사용하는 것입니다. –

관련 문제