마지막 게시물의 일부에서 필자는 여전히 C# 세계에 새로운 것이므로 Dictionary, Hashtable, SortedList 및 SortedDictionary를 각각 비교하는 작은 벤치 마크를 작성했습니다. 다른. 테스트는 8000 번의 반복과 50에서 100000 개의 요소로 실행됩니다. 필자는 새로운 요소를 추가하고, 요소를 검색하고, 일부 요소를 모두 무작위로 반복하여 테스트했습니다. 그 결과는 나에게 많은 혼란을 안겨주는 SortedDictionary의 결과를 제외하고는 그들이 기대했던대로였습니다 ... 그것은 모든 결과에서 느린 것입니다. 그래서 정렬 된 사전의 개념에 대해 빠뜨린 것 같습니다. 나는 이미 Google에 물었다. 그러나 내가 알아 낸 모든 것은 다른 사람들이 같은 테스트 결과를 얻었습니다. 테스트 구현에 따라 약간 다릅니다. 다시 내 질문 : 왜 SortedDicrionary가 다른 모든 것보다 훨씬 느린가요?언제 사전 대신 sorteddictionary를 사용해야합니까?
16
A
답변
19
SortedDictionary는 이진 검색 트리로 구현됩니다. 따라서 요소에 액세스하는 것은 O (lg (n))입니다. 사전은 해시 테이블이며 액세스를 위해 O (1)의 복잡성이 있습니다.
SortedDictionary는 데이터 정렬이 필요할 때 매우 유용합니다 (사전에는 정의 된 순서가 없음). 사전은 대부분의 경우에 적합합니다.
4
대답은 간단히 정렬 된 사전이 필요하면 SortedDictionary
을 사용한다는 것입니다.
시험에서 가장 느린 것으로 끝났지 만 느린 것은 아닙니다. SortedDictionary
이 정확히 필요한 경우 가장 좋은 솔루션입니다. Dictionary
또는 SortedList
을 사용하여 동일하게 수행하는 것은 매우 느립니다.
2
은 에티엔 느 이미 이전에 기술적 인 대답을했다,하지만 더 '일반'발언을 추가 :이 보인다 나는 SortedDictionary의 "정렬 된"비트 부분은 삽입에 약간의 오버 헤드를두고도 검색 항목 추측 것 에티엔의 대답에서.또 다시 질문 : 왜 SortedDicrionary가 다른 모든 것보다 속도가 더 빠릅니까?
그러나 실제 앱에서는 SortedDictionary가 앱의 "이미 정렬 된 사전"을 필요로 할 때 상당한 성능 또는 '인식 된 성능'을 제공 할 수 있습니다.
희망이 있습니다.
관련 문제
- 1. 언제 페이지 대신 UserControl을 사용해야합니까?
- 2. 언제 개체 참조 대신 속성을 사용해야합니까?
- 3. Flash는 언제 사용해야합니까?
- 4. 언제 액터 모델을 사용해야합니까?
- 5. 언제, 어떻게 대기열을 사용해야합니까?
- 6. 사전/SortedList/SortedDictionary를 사용하여 asp.net 사용자 정의 리소스 공급자?
- 7. 언제 @android : id /?를 사용해야합니까?
- 8. div는 언제 사용해야합니까? 프레임은 언제 사용해야합니까? 다른 형식의 동적 콘텐츠는 언제 사용해야합니까?
- 9. 언제 그리고 왜 COM을 사용해야합니까?
- 10. Import-Package는 언제 사용해야합니까? Require-Bundle은 언제 사용해야합니까?
- 11. 언제 _aligned_malloc()을 사용해야합니까?
- 12. 언제 FSharpFunc.Adapt를 사용해야합니까?
- 13. 우리는 ANTLR을 언제 사용해야합니까
- 14. cfthread는 언제 사용해야합니까?
- 15. 인터페이스 작성기는 언제 사용해야합니까?
- 16. 언제 OSGi EventAdmin을 사용해야합니까?
- 17. 언제 ConcurrentSkipListMap을 사용해야합니까?
- 18. 언제 jQuery에서 마침표를 사용해야합니까?
- 19. 언제 == 비교기 ===를 사용해야합니까?
- 20. 레일즈 : 언제 자기를 사용해야합니까?
- 21. 언제 GC.SuppressFinalize()를 사용해야합니까?
- 22. 약한 참조는 언제 사용해야합니까?
- 23. 언제 EF4에서 POCO를 사용해야합니까?
- 24. 의존성 주입은 언제 사용해야합니까?
- 25. 언제 $ (document) .ready를 사용해야합니까?
- 26. 언제 개체 데이터베이스를 사용해야합니까?
- 27. 메모리 뷰는 언제 사용해야합니까?
- 28. Clojure에서 언제 deftype을 사용해야합니까?
- 29. 데이터베이스 동의어는 언제 사용해야합니까?
- 30. 하위 도메인은 언제 사용해야합니까?