Маловероятно, что вам понадобится хранить более двух миллиардов объектов в одной коллекции. Вы будете подвергаться довольно серьезным потерям производительности при выполнении перечислений и поисков, которые являются двумя основными целями коллекций. Если вы имеете дело с таким большим набором данных, есть почти наверняка какой-то другой путь, по которому вы можете пойти, например, разделить вашу отдельную коллекцию на множество небольших коллекций, которые содержат части всего набора данных, с которыми вы работаете.
Привет, секундочку .... у нас уже есть эта концепция - она называется словарь !
Если вам нужно сохранить, скажем, 5 миллиардов английских строк, используйте этот тип:
Dictionary<string, List<string>> bigStringContainer;
Давайте сделаем так, чтобы строка ключа представляла, скажем, первые два символа строки. Затем напишите метод расширения следующим образом:
public static string BigStringIndex(this string s)
{
return String.Concat(s[0], s[1]);
}
и затем добавьте элементы в bigStringContainer следующим образом:
bigStringContainer[item.BigStringIndex()].Add(item);
и назовите это днем. (Очевидно, есть более эффективные способы сделать это, но это только пример)
Да, и если вам действительно нужно иметь возможность искать любой произвольный объект по абсолютному индексу, используйте Array
вместо коллекции. Хорошо, да, вы используете некоторую безопасность типов, но вы можете индексировать элементы массива с помощью long
.