Учитывая возможность переписать, я бы, но в любом случае, код в том виде, в каком он есть:
List<string> foobar;
Затем добавим связку строк в foobar.
В count = 16777216 мы попали в пределы памяти.
Я понимаю, что каждая строка будет другого размера. Действительно, глядя на данные (не мои данные), большинство из них - 2 или 3 символа.
Каков максимальный предел данных в список в С#?, указывает, что максимальный предел:
Максимальное количество элементов, которые могут быть сохранены в текущем реализация List - теоретически Int32.MaxValue - просто более 2 миллиардов.
Однако:
В текущей реализации Microsoft CLR есть 2 ГБ максимальный размер объекта. (Возможно, что другие реализации, например Mono, не имеют этого ограничения.)
В моем примере у меня есть, что, 16 миллионов результатов * несколько байтов? Диспетчер задач показывает, что используется гигабайт, но у меня есть 8 гигабайт оперативной памяти.
16777216 (2 ^ 24) кажется довольно специфическим значением - подозрительно, как предел, но я не могу найти какую-либо документацию в любом месте) назад или b) найти способ вокруг него?
Любая помощь будет оценена.
Некоторые коды:
List<string> returnList = new List<string>();
SqlDataReader dr; // executes a read on a database, have removed that part as that bit works fine
if (dr.HasRows)
{
while (dr.Read())
{
returnList.Add(dr.GetString(0).Trim());
}
}
Что упрощенная форма, теперь у меня есть попытка try/catch для исключения OOM, но это фактический код, который дает мне печаль.