C# - 将大 (150MB) 文本文件读入富文本框
Posted
技术标签:
【中文标题】C# - 将大 (150MB) 文本文件读入富文本框【英文标题】:C# - Read in a large (150MB) text file into a Rich Text Box 【发布时间】: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;
【问题讨论】:
你能发布一个堆栈跟踪吗?所以我们可以准确地看到异常发生在哪里。此外,这可能是相关的:***.com/questions/363680/…(关于字符串构建器) 请澄清一下,这段代码(阅读部分)会抛出异常还是在加载 RTB 时会发生这种情况? 但是 150MB 的文本文件?它包含所有写于 19 世纪的书籍吗? :) 使用初始大小初始化,减少调整大小的需要。请记住,每次达到最大值时,它都会将缓冲区大小加倍。大小可以从构造函数中设置。通过调用 .EnsureCapacity() 来在内存中腾出空间。 有没有人问过为什么?你到底打算如何处理包含 1.5 亿个字符的文本信息?即使您设法加载它,我怀疑您是否可以编辑它(甚至滚动它)而不会出现更多问题。也许您可以发布您想要实现的目标? 【参考方案1】:使用RichTextBox.LoadFile
http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.loadfile.aspx
我不确定您为什么要将整个文本加载到StringBuilder
。或者,您可以将FileStream
传递给LoadFile
,这将为您呈现大文件。
【讨论】:
恐怕这也会导致 System.OutOfMemoryException。有什么想法吗?【参考方案2】:我猜你应该以某种方式管理输入文件 - 比如说将它分成几个更少的文件并以编程方式在各个部分之间导航..
150MB 的文件听起来很不正常。也许你应该看看流式数据处理而不是文件一。
【讨论】:
以上是关于C# - 将大 (150MB) 文本文件读入富文本框的主要内容,如果未能解决你的问题,请参考以下文章