我遇到一个问题,当ReadToEnd尝试读取ASP.net网站中的16MB文本文件时会抛出OutOfMemory异常。
在调查原因的同时,我遇到了File.ReadAllText,这正是我正在做的事情,我并不关心如何获取文本。
但是看一下ReadAllText的文档,它没有提到OutOfMemory异常的可能性。这是为什么?它是否以不同于ReadToEnd的方式实现,以至于它不太可能耗尽内存,或者如果内存不足会引发其他异常?
修改添加代码只是为了展示我目前正在做的事情:
StreamReader inputFile = System.IO.File.OpenText(filename);
string cacheData = inputFile.ReadToEnd();
inputFile.Close();
有时我在第2行得到OutOfMemory异常。没有进行解析,文件只有16M的文本,我知道并不奇怪。
重新启动IIS通常会修复它。但是当我收到错误时,我有2G的RAM可用,IIS可能会达到内部限制吗? w3wp.exe进程通常使用350-500M(这是Windows Server 2003上的IIS 6)
答案 0 :(得分:6)
来自Reflector,System.IO.File类:
public static string ReadAllText(string path, Encoding encoding)
{
using (StreamReader reader = new StreamReader(path, encoding))
{
return reader.ReadToEnd();
}
}
就像那样。
答案 1 :(得分:1)
ReadAllText
会抛出OutOfMemory异常 - 刚试过它。
答案 2 :(得分:1)
This post很好地解释了为什么我遇到了原始的OutOfMemory错误。 32位Windows Server 2003上的IIS 6.0只能使用大约600-700M的内存,即使我有4GB。
向boot.ini添加/ 3GB并重新启动服务器使错误消失(即使我的IIS内存使用量似乎远远超过它原来的水平)。
答案 3 :(得分:0)
我遇到了与C#Windows窗体应用程序相同的问题。使用设置为64位的目标平台构建我的应用程序解决了这个问题。