Почему ReadToEnd может вызвать исключение OutOfMemory, а ReadAllText - нет?

У меня возникла проблема, когда ReadToEnd выдает исключение OutOfMemory при попытке прочитать текстовый файл размером 16 МБ на веб-сайте ASP.net.

Во время исследования потому что я наткнулся на File.ReadAllText, который на самом деле то, что я делаю, меня не волнует, как я получаю текст.

Но, глядя на документацию ReadAllText , он не упоминает возможность исключения OutOfMemory. Почему это? Реализован ли он иначе, чем ReadToEnd, таким образом, что у него меньше шансов исчерпать память, или он выдает какое-то другое исключение, если не хватает памяти?

Изменить Добавление кода, чтобы показать, что я в настоящее время делаю:

StreamReader inputFile = System.IO.File.OpenText(filename);
string cacheData = inputFile.ReadToEnd();
inputFile.Close();

И иногда я получаю исключение OutOfMemory в строке 2. Анализ не выполняется, файл занимает всего 16 МБ текста, ничего странного, насколько мне известно.

Обычно это исправляет перезапуск IIS. Но когда я получаю сообщение об ошибке, у меня примерно 2 ГБ ОЗУ, возможно, IIS достигает какого-то внутреннего ограничения? Процесс w3wp.exe обычно использует 350-500 МБ (это IIS 6 в Windows Server 2003)

5
задан thelsdj 16 June 2011 в 23:06
поделиться