1

我有一个程序可以读取 SQL Server 中的 NTEXT 列并在富文本框中显示输出。对于其中一个值,它会抛出一个OutofMemoryException.

我使用 a 读取该列SqlDataAdapter,然后将该列的内容附加到 a stringBuilder。我收到以下代码行的异常。

rtbEventDesc.Text = stringBuilder.ToString();

显示的消息是:

内存不足,无法继续执行程序。

我该如何解决这个问题?此特定行的列大小为 9 MB,这不算多。

4

1 回答 1

0

我的建议是将 coumn 转储到一个临时文件,然后使用以下命令读取该文件:

rtbEventDesc.LoadFile(tmpFileName);

希望能帮助到你。


编辑

在无法使用文件保存文件的情况下,或许可以使用内存流:

Byte[] text = GetByteArrayFromSqlAdapter();
using (MemoryStream ms = new MemoryStream())
{
   ms.Write(text, 0, text.Length);
   rtbEventDesc.LoadFile(ms, RichTextBoxStreamType.RichText);
}

编辑二

似乎 RichTextboxControl 在加载 9Mb 文件时不够好,它的性能没有更好,主应用程序卡住并在窗口标题中显示(未响应)消息。

这里有两个选项:

  1. 如果加载时间在合理的时间内结束,请使用 BackgroundWorker 或任何其他异步机制来加载文件,在加载时向用户提供反馈。

  2. 使用性能更好的其他文本框。我推荐你使用Scintilla.NETAvalonEdit

于 2013-02-20T16:05:46.100 回答