У меня есть этот метод, который, как ожидается, вернет строку, но строка довольно большая, может быть, в ГБ. В настоящее время это исключение из памяти.Как справиться с построкой строкой исключения из памяти
Я думал, что напишу файл (произвольное имя файла), затем прочитайте его, удалив файл и отправьте ответ. Пробовал MemoryStream
и StreamWriter
, которые тоже выбежали из памяти.
Не хотел инициализировать StringBuilder
с емкостью, так как размер не был известен, и я думаю, что ему нужен непрерывный блок памяти.
Каков наилучший способ решения этой проблемы?
public string Result()
{
StringBuilder response = new StringBuilder();
for (int i = 1; i <= Int.Max; i++)
{
response.Append("keep adding some text {0}", i);
response.Append(Environment.NewLine);
}
return response.ToString();
}
Можете ли вы показать реальный код? – Blorgbeard
Если вы использовали StreamWriter, и стратегия поддержки заключалась в записи в память, тогда да, вы получите исключение OutOfMemory. Вы можете попробовать использовать поток файлов, например, файл, который записывает в хранилище переходных процессов операционной системы (например, каталог temp). Если производительность не вызывает беспокойства, вы можете просто вызвать 'Flush()' в поток файлов после того, как вы напишете на него. Хотя, не было бы неправильно, предполагая, что вы просто напишите прямо в файл в этом случае без буферизации. – kevin628
Лучше хранить записи по частям, чем сбрасывать их вместе. У вас есть код, в котором вы используете 'Result()'? – Ian