.Net의 특정 컬렉션 유형에는 선택적 "초기 용량"생성자 매개 변수가 있습니다. 예 :컬렉션 유형의 초기 용량입니다 (예 : Dictionary, List
Dictionary<string, string> something = new Dictionary<string,string>(20);
List<string> anything = new List<string>(50);
MSDN에서이 개체의 기본 초기 용량을 찾지 못하는 것 같습니다.
사전에 12 개 정도의 항목 만 저장한다는 것을 알고 있다면 초기 용량을 20과 같이 설정하는 것이 좋지 않습니까?
제 생각에 용량이 적중 될 때마다 두 배가되는 StringBuilder의 경우와 같이 용량이 커지고 각 재 할당에는 많은 비용이 소요됩니다. 데이터를 보유 할 것으로 알고있는 크기로 사전 설정하지 않는 이유는 무엇입니까? 혹시라도 여분의 공간이 필요 하신가요? 초기 용량이 100이고, 내가 12 개 정도 밖에 필요하지 않다는 것을 안다면, 나머지 메모리는 아무 것도 할당되지 않은 것처럼 보입니다.
소수 계산은 입력 위치에 대한 해시 충돌 및 프로빙을 처리 할 가능성이 높습니다. 내부 메커니즘에 따라 각 해시에 하나의 값만 저장하면 보조 저장소 위치가 필요합니다. 프라임을 사용하지 않으면 삽입에 실패 할 수있는 해시를 잠재적으로 찾을 수 있습니다. – Matt
사전은 연결을 사용합니다. 프라임 숫자 테이블 크기는 잘못된 해시 함수를 보완합니다. 좋은 해시 함수는 임의의 분포를 생성합니다. 두 테이블 크기의 힘은 현대 해시 테이블에서 사용됩니다. (.net 해시 테이블은 자바 해시 테이블을 기반으로했습니다. 자바 해시 테이블은 프라임 숫자를 사용했기 때문에 해시 함수가 좋지 않은 시대에 사용했습니다. Microsoft는 해시 결합 방법을 제공하지 않기 때문에 많은 홈 내장 해시 함수는 빈약 한 배포를 생성하므로 해시 함수가 소수의 배수를 생성 할 때까지 때로는 소수 선택이 보상됩니다. –