Tôi đã đọc ở đây tại SO mà Hashtable và Từ điển là khá nhiều giống nhau ngoại trừ những lợi thế của tránh boxing/unboxing.Từ điển và sử dụng bộ nhớ Hashtable
Sử dụng Kiến Profiler tôi đo một ứng dụng rất đơn giản với các cấu trúc sau:
class Node
{
Dictionary<string, Node> Children = new Dictionary<string, Node>();
}
và
class NodeOld { Hashtable Children = new Hashtable(); }
Ok, một danh sách 1,5 triệu trường hợp là người đầu tiên mất khoảng 140Mb, trong khi thứ hai cần hơn 700Mb (hệ thống 64 bit).
Vì vậy, có sự khác biệt HUGE trong triển khai, phải không?
Các Ants Profiler công bố một số lượng lớn của các đối tượng Hashtable + Bucket trên gương cỡ lớn ...
Vì vậy, có một tùy chọn tương đương (bộ nhớ am hiểu) cho từ điển nếu bạn đã để dính vào 1.1?
Tôi nghi ngờ rằng Từ điển được triển khai bằng cách sử dụng cây nhị phân tự cân bằng chứ không phải bảng băm. Ngoài ra, mức tiêu thụ bộ nhớ bạn tìm thấy sau khi thu gom rác hay chỉ tổng cộng được tích lũy? Khi Hashtable thay đổi kích cỡ chính nó (vì ngày càng có nhiều phần tử được thêm vào), nó có thể tạo ra nhiều hơn và nhiều hơn nữa Xô (mặc dù những cái cũ hơn sẽ đủ điều kiện để thu thập.) –
cho hashtable sử dụng 700MB, rất nhiều thùng trống ? – saus
Điều này mô tả việc triển khai bên trong .net HashTable và Từ điển http://msdn.microsoft.com/en-us/library/ms379571%28v=vs.80%29.aspx – hatchet