Я создаю приложение, которое хранит множество пользовательских данных в памяти, и в основном хранит их в структурах List ‹T› (и немного Dictionary ‹T, T›, когда мне нужен поиск).
И мне интересно ...
Насколько эффективны списки? Сколько накладных расходов памяти я получу для каждого из них? (то есть пространство памяти в дополнение к тому, что будут занимать объекты, которые они содержат). Какую сумму штрафа я выплачиваю каждый раз, когда создаю новый объект?
Есть более эффективный способ?
Словари - это просто HashTables, верно? Или это менее эффективная структура данных?
Я хотел бы использовать массивы, но у меня типичная проблема с постоянным добавлением и удалением вещей из них, поэтому необходимость их увеличения / уменьшения была бы проблемой.
Есть идеи / предложения?
Изменить: я знаю свои основные структуры данных 101 и почему связанный список лучше для добавления / удаления, а HashTable лучше для произвольного доступа.
Меня больше всего беспокоит идионсинкразия .Net. Например, сколько памяти тратит каждая из этих структур. И время потрачено на их инициализацию / уничтожение.
Такие вещи, как, например, если требуется много времени для создания экземпляра / сборки списка List, но не так много, чтобы очистить его, возможно, мне стоит оставить небольшой пул списков, ожидающих меня, и очистить их и отправить их обратно в пул когда это будет сделано, вместо того, чтобы просто разыменовать их.
Или, если хеш-таблицы быстрее доступны, но тратят много памяти, я мог бы предпочесть использовать списки и просматривать их для подсчета небольших элементов.
И я также очень хотел бы сосредоточиться на использовании памяти, поскольку мое приложение чрезвычайно интенсивно использует память (например, memcached) ... Кто-нибудь знает, где я могу найти такую информацию?