Tôi đã sử dụng SortedList() trong một lớp lưu trữ khoảng 15-100K dữ liệu.Sử dụng bộ nhớ, SortedList vs Danh sách sự cố
Gần đây các yêu cầu của tôi đã thay đổi, dữ liệu không được lưu trữ như được sắp xếp nữa nên tôi chuyển sang Danh sách().
Tuy nhiên trong trường hợp này, tôi nhận thấy rằng Danh sách() tiêu thụ khoảng 20% + bộ nhớ nhiều hơn.
9K mục:
- SortedList: 105MB
- liệt kê: 125MB
15K mục:
- SortedList: 115MB
- Danh sách: 140MB
Trong môi trường tôi phát triển, bộ nhớ khá quan trọng. Thay vì List() những gì tôi có thể sử dụng để tránh tiêu thụ bộ nhớ thêm này và vẫn có một danh sách không được sắp xếp?
P.S. Tôi sử dụng một HashSet (Of String) để cung cấp kiểm tra duy nhất trong khi sử dụng List (Of) để mô phỏng SortedList.ContainsKey() mặc dù tôi không nghĩ rằng nó có thể mang lại chi phí bộ nhớ như vậy.
P.S. 2: Ứng dụng của tôi đã có khoảng 80 MB cấp phát bộ nhớ cơ sở trong khi khởi động. Vì vậy, con số sẽ được sửa như 105-80 = 25, 125-80 = 45 và vân vân
KẾT QUẢ
Cảm ơn tất cả các câu trả lời, kết quả cuối cùng là:
- Bạn nên đặt dung lượng chính xác để tiết kiệm bộ nhớ
- Hashset rất xấu về bộ nhớ và tiêu thụ nhiều hơn mong đợi. Đây là vấn đề. Somehow SortedList() quản lý để sử dụng ít bộ nhớ hơn cho một chức năng tương tự.
Một số Bencmarks: 500 ký tự, 250000 chèn
Danh sách (STRING) (50000)
274 ms - 226 MB
SortedList (Tất String, Chuỗi) (50000)
34868 ms - 230 Mb
Hashset
420 ms - 232 MB
điển (HÀNH String, Object)
486 ms - 234 MB
Mặc dù khi tôi thay đổi giảm đếm đến 25, sau đó:
Hashset cho 600.000 lặp 300 Mb nơi Danh sách() là 286 Mb
Cũng về việc sử dụng bộ nhớ Hashset: http://blog.mischel.com/2008/04/09/hashset-limitations/ điển (Tất chuỗi, đối tượng) không phải là tốt hơn nhiều hoặc trong thử nghiệm của tôi.
Bạn lấy các giá trị đó từ đâu? –
Từ ứng dụng thử nghiệm của tôi, mặc dù bộ nhớ nên bộ nhớ - bộ nhớ cơ sở của ứng dụng (đó là khoảng 80MB). –
Từ Trình quản lý Tác vụ (hoặc tương tự)? Hãy thử sử dụng một profiler (như CLRProfiler: http://www.microsoft.com/downloads/details.aspx?familyid=86ce6052-d7f4-4aeb-9b7a-94635beebdda). Dữ liệu bộ nhớ từ Task Manager phụ thuộc vào hành vi thu gom rác thải. –