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) 文本文件读入富文本框的主要内容,如果未能解决你的问题,请参考以下文章

C#中,怎么使用富文本框控件显示一个文件的内容

在 C# 中为富文本框分配内存

将大制表符分隔文件读入R [重复]

在 C# 中获取 SharePoint 富文本字段值

C# 富文本内容生成PDF,用开源免费的类库

求救,C#富文本框显示异常!