List<T>
будет ограничен максимальным размером массива, который составляет 2 ГБ (даже в x64). Если этого недостаточно, вы используете неправильный тип хранилища данных. Вы можете сэкономить много накладных расходов, запустив нужный размер, передав конструктору int
.
Re your edit - с 134217728 x Int32, то есть 512 МБ. Помните, что List<T>
использует алгоритм удвоения; если вы делаете капельное питание через Add
(не выделяя все пространство в первую очередь), он попытается удвоить до 1 ГБ (на вершине 512 МБ вы уже держите остальное приложение, и, конечно же, CLR и библиотеки). Я предполагаю, что вы на x86, так что у вас уже есть ограничение 2GB за процесс, и вполне вероятно, что вы разложили свою «большую кучу объекта» до death при добавлении элементов.
Лично, да, это звучит о праве начать получать из памяти на данный момент.
Edit: в .NET 4.5, массивы размером более 2 Гб допускается, если переключатель <gcAllowVeryLargeObjects>
включен. Предел тогда составляет 2^31 пункта. Это может быть полезно для массивов ссылок (по 8 байтов в x64) или массива больших struct
.
@Tony - вы упоминаете (комментарии), что ваша память должна быть иссякает быстро ... что актуальной проблемы вы видя? –
@Marc, отредактировал мое сообщение с проблемой –
Обновлено ответ на ваше обновление –