Các loại bộ sưu tập nhất định trong .Net có tham số hàm khởi tạo "Công suất ban đầu" tùy chọn. Ví dụ:Dung lượng bộ sưu tập ban đầu, ví dụ: Từ điển, Danh sách
Dictionary<string, string> something = new Dictionary<string,string>(20);
List<string> anything = new List<string>(50);
tôi dường như không thể tìm thấy những gì mặc định công suất ban đầu là dành cho các đối tượng này trên MSDN.
Nếu tôi biết tôi sẽ chỉ lưu trữ 12 hoặc hơn các mục trong từ điển, không có ý nghĩa gì khi đặt công suất ban đầu là 20? Lý do của tôi là, giả định rằng khả năng phát triển như nó cho StringBuilder, tăng gấp đôi mỗi lần công suất bị tấn công, và mỗi lần phân bổ lại tốn kém, tại sao không đặt trước kích thước cho thứ bạn biết sẽ giữ dữ liệu của bạn , với một số phòng phụ chỉ trong trường hợp? Nếu công suất ban đầu là 100, và tôi biết tôi sẽ chỉ cần một tá hoặc hơn, nó có vẻ như phần còn lại của bộ nhớ đó được phân bổ cho không có gì.
Tính toán số nguyên tố có khả năng đối phó với các va chạm băm và thăm dò vị trí đầu vào. Tùy thuộc vào cơ chế nội bộ nếu chúng chỉ lưu trữ một giá trị tại mỗi băm thì chúng cần vị trí lưu trữ thứ cấp. Nếu bạn không sử dụng số nguyên tố thì bạn có khả năng tìm thấy một băm mà bạn không thể chèn vào. – Matt
Từ điển sử dụng chuỗi. Các kích thước bảng số nguyên tố bù cho các hàm băm kém. Hàm băm tốt tạo ra các bản phân phối ngẫu nhiên; sức mạnh của hai kích thước bảng được sử dụng trong bảng băm hiện đại (bảng băm .net được dựa trên bảng băm Java, cũng sử dụng số nguyên tố, vì đó là một cách cũ để thực hiện nó, trong những ngày hàm băm kém). Vì Microsoft không cung cấp các phương thức kết hợp băm được xây dựng, nhiều hàm băm được xây dựng trong nhà tạo ra các bản phân phối kém, nên lựa chọn số nguyên tố bù trừ, đôi khi - cho đến khi hàm băm tạo bội số của số nguyên tố. –