Использование памяти, SortedList по сравнению с проблемой Списка

Я использую это..

finally
{
    if (ps != null) ps.close();
    if (rs != null) rs.close();
}
7
задан dr. evil 4 October 2009 в 19:02
поделиться

6 ответов

A List с 9 КБ элементов будет иметь емкость от 9 КБ до 18 КБ, поэтому накладные расходы для этих элементов будут от 36 до 72 КБ (удвоение на 64-битная система).

Ясно, что 72 Кбайт даже близко не к той разнице в 20 Мбайт, которую вы видите, поэтому использование памяти самим списком не может быть причиной. Особенно учитывая, что отсортированный список также должен содержать ссылку на каждый объект, поэтому использование памяти должно быть одинаковым.

Итак, либо что-то еще использует память, либо вы не смотрите на фактическое использование памяти для заявление. Если вы смотрите в диспетчере задач, вы не видите, сколько памяти используется, а только сколько выделено диспетчером памяти.

3
ответ дан 6 December 2019 в 14:06
поделиться

Вы заранее выделяете емкость List ?

Небольшой эксперимент, который я провел:

Эта программа занимает ~ 640 МБ

List<int> list = new List<int>(0);

for (int i = 0; i < 100000000; i++)
{
    list.Add(i);
}

Эта программа занимает ~ 320 МБ

List<int> list = new List<int>(100000000);

for (int i = 0; i < 100000000; i++)
{
    list.Add(i);
}
9
ответ дан 6 December 2019 в 14:06
поделиться

Если у вас уже есть HashSet вашей коллекции, я не уверен, зачем вам также нужен List, но если вы ищете контейнер, который гарантирует уникальность и функциональность ContainsKey (), почему не общий словарь?

Независимо от вашего решения по приведенным выше вопросам, использование чего-то вроде диспетчера задач слишком неточно, чтобы принимать решения о потреблении памяти в .NET. Если вы еще не сделали этого, попробуйте SciTech's .NET Memory Profiler или ANTS Profiler и запустите свое приложение. Сделайте снимок использования памяти непосредственно перед загрузкой вашего набора и сразу после этого, чтобы сравнить. Вы можете сделать это с несколькими типами коллекций, чтобы с высокой точностью измерить относительное использование памяти каждым из них.

2
ответ дан 6 December 2019 в 14:06
поделиться

Ознакомьтесь с Power Collections от Wintellect, эквивалентом .NET для коллекций типов STL. Я считаю, что тип Set должен предоставить вам необходимую функциональность (уникальность), но вам нужно будет выполнить тесты для сравнения. Только мои 2 цента.

0
ответ дан 6 December 2019 в 14:06
поделиться

Я бы порекомендовал посмотреть застекленные списки ( http://sites.google.com/site/glazedlists/ ). Они очень быстро сортируются и отлично подходят для памяти.

0
ответ дан 6 December 2019 в 14:06
поделиться

Хеш-наборы (и хэш-таблицы) используют много памяти! Намного больше, чем простой список / отсортированный список

1
ответ дан 6 December 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: