Я использовал SortedList () в классе, который хранит около 15-100K данных.
Недавно мои требования изменились, данные больше не должны храниться как отсортированные, поэтому я переключился на List ().
Однако в этом случае я заметил, что List () потребляет около 20% + больше памяти.
9K предметов:
- SortedList: 105MB
- Список: 125 МБ
15K предметов:
- SortedList: 115MB
- Список: 140 МБ
В среде, в которой я развиваюсь, память очень важна. Вместо List (), что я могу использовать, чтобы избежать этого дополнительного потребления памяти и все еще иметь несортированный список?
P.S. Я использую HashSet (Of String) для обеспечения проверки уникальности при использовании List (Of) для имитации SortedList.ContainsKey (), хотя я не думаю, что это может привести к таким затратам памяти.
P.S. 2: Моему приложению выделено около 80 МБ базовой памяти при запуске. Таким образом, числа должны читаться как 105-80 = 25, 125-80 = 45 и т. Д.
РЕЗУЛЬТАТЫ
Спасибо за все ответы, окончательные результаты:
- Вы должны установить правильную емкость для экономии памяти
- Hashset очень плохо относится к памяти и потребляет намного больше, чем ожидалось. Это была проблема. Каким-то образом SortedList () удается использовать меньше памяти для аналогичной функциональности.
Некоторые отметки:
500 символов, 250000 вставок
Список (OF STring) (50000)
274 мс - 226 МБ
SortedList (Of String, String) (50000)
34868 мс - 230 Мб
HashSet
420 мс - 232 МБ
Словарь (OF String, Object)
486 мс - 234 МБ
Хотя, когда я изменил счет уменьшился до 25, тогда:
Hashset для 600 000 итераций 300 МБ, где List () равно 286 МБ
Также об использовании памяти Hashset: http://blog.mischel.com/2008/04/09/hashset-limitations/ Словарь (из строки, объекта) тоже был не намного лучше в моем тесте.