- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在尝试读取 ASP.net 网站中的 16MB 文本文件时遇到 ReadToEnd 抛出 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)
最佳答案
来自 Reflector,System.IO.File 类:
public static string ReadAllText(string path, Encoding encoding)
{
using (StreamReader reader = new StreamReader(path, encoding))
{
return reader.ReadToEnd();
}
}
就是这样。
关于c# - 为什么 ReadToEnd 会抛出 OutOfMemory 异常而 ReadAllText 不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6379459/
我正在创建一个非常基本的程序来尝试一些文件选项,在这种情况下,我想计算我在 ReadAllText 的帮助下创建的文本文件中有多少个单词,但是,路径名总是显示异常. 这是我的代码: var path
我正在尝试做的是读取文件中的所有文本,如果它包含单词“Share”,则执行正则表达式。这是代码: DirectoryInfo dinfo = new DirectoryInfo(@"C:\Docume
我的问题是我想解析一个文件,它必须检测一个特殊的字符 ('Â') 来做一些事情。我没有设法检测到它,但它适用于像“a”这样的普通字符。因此,我试图了解问题出在哪里,并创建了一个 .txt 文件,其唯一
特别是使用 TPL Task.Factory.StartNew 生成一个线程: Task.Factory.StartNew(() => { File.ReadAllText(@"this
我在一个旨在格式化我拥有的一些文件的程序中调用 File.ReadAllText()。 其中一些文件包含 ® (174) 符号。但是,当读取文本时,返回的字符串包含 � (65533) 符号,而 ®
我正在做以下事情: if (File.Exists(filePath)) { string base64 = File.ReadAllText(filePath); return new
File.ReadAllText 似乎有问题,因为即使目标文件存在,它也会返回“NotSupportedException”。无论将什么放入参数中,它都会不断抛出相同的异常。 using System
我有一个很大的 SQL 脚本(大约 70MB),我需要将它全部读入内存,然后在 GO 语句上拆分。 我正在执行以下操作,但得到了 OutOfMemoryException: var script =
因为我喜欢开发文件 I/O 应用程序,而我的新开发平台是 Windows Mobile。有什么方法可以不使用 File.ReadAllText 来读取所有文件吗? 因为Windows Mobile没有
我正在尝试将 File.ReadAllText 用作静态 readonly 字符串。我的问题是我正在用 .NETz 编译它,当我的程序启动时它会查找我的字符串,如果不是发现我遇到了一个讨厌的异常。是否
我在文件 utf8.txt 中有一些 UTF-8 文本。该文件包含一些超出 ASCII 范围的字符。我尝试了以下代码: var fname = "utf8.txt"; var enc = Encodi
我正在访问一个由第三方工具更新的文件,该工具不断从 com 端口捕获数据并填充该文件。对于这个文件,在填充数据时,我想对内容做一些检查并记录状态以供我使用。 并且,为了进行检查,我使用 FileInf
如果我们不提解码,他们会使用什么解码? 我不认为它是 System.Text.Encoding.Default。如果我EXPLICITLY 放置 System.Text.Encoding.Defaul
起初我使用 StreamReader 从文件中读取文本: StreamReader reader = new StreamReader(dialog.OpenFile()); txtEditor.Te
我试图弄清楚如何捕获以下PowerShell代码行的错误消息(例如,如果运行脚本的用户无权读取文件): [IO.File]::ReadAllText("C:\[test].txt") 使用Get-Co
我们在 Content/Templates 文件夹下有 .cshtml 文件格式的电子邮件模板。我们使用 File.ReadAllText() 读取该模板,然后应用我们的模型值,然后将该邮件发送给特定
打开文本文件时遇到问题...有这段代码,调用后有空stringFromFile public string OpenTextFile () { var stringFr
C# 方法 File.ReadAllText(string filePath)不接受目录路径作为参数 - 它需要一个文件路径。我明白这一点。 但为什么在这种情况下抛出 UnauthorizedAcce
很明显,许多应用程序需要处理文件并向用户显示错误。然而,System.IO.File 类的成员会抛出很多异常。这些仅适用于 ReadAllText: 参数异常 ArgumentNullExceptio
File.ReadAllLines() 和 File.ReadAllText() 有什么区别? 最佳答案 ReadAllLines返回一个字符串数组。每个字符串包含文件的一行。 ReadAllText
我是一名优秀的程序员,十分优秀!