【发布时间】:2012-03-18 21:32:40
【问题描述】:
我正在尝试将 150mb 的文本文件读入富文本框。
目前,我使用 StreamReader 遍历文件中的每一行,将每一行附加到 StringBuilder 实例。
这适用于较小的文件,但在尝试读取大文件时出现 System.OutOfMemory 异常。
我认为读取 150mb 文件没有任何问题 - 有大量物理内存,并且完全在 Windows 32 位应用程序地址空间内。
如果这里有人知道如何做到这一点,将不胜感激。
我会在最后附上我的代码。
谢谢。
StringBuilder sb = new StringBuilder();
using (StreamReader sr = new StreamReader(fileLocation))
{
string line;
while ((line = sr.ReadLine()) != null)
{
sb.AppendLine(line);
}
}
return sb;
【问题讨论】:
-
你能发布一个堆栈跟踪吗?所以我们可以准确地看到异常发生在哪里。此外,这可能是相关的:stackoverflow.com/questions/363680/…(关于字符串构建器)
-
请澄清一下,这段代码(阅读部分)会抛出异常还是在加载 RTB 时会发生这种情况?
-
但是 150MB 的文本文件?它包含所有写于 19 世纪的书籍吗? :)
-
使用初始大小初始化,减少调整大小的需要。请记住,每次达到最大值时,它都会将缓冲区大小加倍。大小可以从构造函数中设置。通过调用 .EnsureCapacity() 来在内存中腾出空间。
-
有没有人问过为什么?你到底打算如何处理包含 1.5 亿个字符的文本信息?即使您设法加载它,我怀疑您是否可以编辑它(甚至滚动它)而不会出现更多问题。也许您可以发布您想要实现的目标?
标签: c# windows winforms visual-studio