C#의 사전에 대한 일반적인 질문이 있습니다. 텍스트 파일을 읽고 키와 값으로 나누어 사전에 저장한다고 가정 해 보겠습니다. 모두를 하나의 사전에 넣거나 작은 사전으로 나누는 것이 더 유용할까요? 작은 텍스트 파일에는 큰 차이가 없지만 일부 파일은 100,000 개가 넘습니다. 무엇을 권하고 싶습니까?여러 사전 또는 하나의 거대한 하나를 사용하십시오.
답변
첫 번째 규칙은 최적화를 시도하기 전에 항상 벤치마킹입니다. 즉, 어떤 사람들은 당신을 위해 벤치마킹을했을 것입니다. 기사에서 그 results here
을 확인
(키의 절반 번호) 작은 사전이 훨씬 더 빨랐다 (그냥 케이스에 그물에서 사라집니다). 이 경우 입력의 두 사전의 동작은 모두 과 동일합니다. 즉, 사전 에 불필요한 키가 있으면 속도가 느려집니다.
내 관점은 별도의 목적으로 별도의 사전을 사용해야한다는 것입니다. 두 세트의 키가있는 경우 동일한 사전 인 에 키를 저장하지 마십시오. 그들을 나눌 수 있다면, 당신은 검색 성능을 향상시킬 수 있습니다.
제공 :
전체 사전 : dotnetperls.com 기사에서 또한
791 MS
절반 크기의 사전 : 아마도 591 밀리 [빠른]
당신은 훨씬 적은 코드와 200ms 더 살 수 있습니다, 그것은 당신의 어플리케이션에 달려 있습니다.
고마워요, 그게 내가 찾은 정보입니다 –
제가 확인하실 수 있습니다. 1 사전에 260 만 개의 키가 있습니다. 조회 당 거의 두 번째 실행 중이었고, 100 개의 사전으로 부끄러워했습니다. 약 0.5 초. – ChadJPetersen
- 1. 여러 리소스 사전, 하나를 선택하십시오
- 2. C# 하나의 텍스트 상자를 여러 항목에 사용하십시오.
- 3. PHP : 하나의 거대한 데이터베이스 클래스 또는 여러 개의 작은 클래스?
- 4. 하나의 거대한 SQL 문 또는 여러 개의 작은 SQL 문?
- 5. 여러 거대한 .accdb 파일을 하나의 파일로 병합
- 6. 사전 형식으로 목록을 사용하십시오.
- 7. 하나의 SQL 연결을 여러 트랜잭션에 사용하십시오.
- 8. MergedDictionary의 스타일을 여러 번 사용하십시오.
- 9. 여러 열 중 하나를 유지하면서 하나의 필드로 그룹화 된 여러 행 중 하나를 검색하려면
- 10. 하나의 파일 또는 하나의 기능에 대해서만 doxygen 인라인 소스를 사용하십시오.
- 11. 하나의 테이블 또는 mysql에 여러 테이블
- 12. 다른 사전 내의 사전 + 하나의 키에 대한 여러 값
- 13. 다중 처리를 사용하여 부모에게 거대한 사전 반환
- 14. 하나의 키와 여러 값을 가진 파이썬 사전
- 15. 여러 열과 하나의 사전 사이의 매핑이 가능합니까?
- 16. 하나의 열을 선택하여 사용하십시오.
- 17. 하나의 변수에 str_replace를 사용하십시오.
- 18. 하나의 거대한 access.log 파일을 처리하십시오.
- 19. 조건부로 여러 사전 병합
- 20. python : 다중 처리를 사용하여 거대한 사전 공유
- 21. 무작위로 선택한 거대한 사전 : iPhone Dev
- 22. spyOn 여러 $ 브로드 캐스트 또는 그 중 하나를 무시하십시오.
- 23. IOS 하나의 클래스에서 단일 Dispatch_group을 여러 번 사용하십시오.
- 24. 파이썬에서 공통 또는 중앙 사전
- 25. 여러 라이브러리 파일 하나를 만듭니다.
- 26. 파이썬 사전 KeyError를하고 여러 사전
- 27. 대용량 파일을 하나의 거대한 파일에 결합
- 28. Multiindex 또는 사전
- 29. Django 템플릿의 사전 키로 루프 변수를 사용하십시오.
- 30. 하나의 고정 행렬에 거대한 수의 벡터를 곱하십시오.
Eric에 동의합니다 ... 간단하고 쉬운 방법으로 먼저 수행 한 다음 목표에 맞지 않을 경우 필요에 따라 최적화/수정하십시오. 즉, .NET 범용 사전은 쉽게 100,000 개의 요소를 처리 할 수 있으므로 명시된 최악의 시나리오에는 아무런 문제가 없을 것으로 예상됩니다. –
.NET 프레임 워크가 4.5 미만인 경우 - 단일 개체에 대해 2Gb 메모리 제한에주의하십시오. 나는. "거대한"사전은이 경우 2GB를 초과 할 수 없습니다. –
답변 주셔서 감사합니다 :) –