C# 富文本框-文本分配导致OutofMemoryException
我有一个程序,可以读取SQL Server中的NTEXT列,并在富文本框中显示输出。对于其中一个值,它会抛出一个C# 富文本框-文本分配导致OutofMemoryException,c#,.net,richtextbox,C#,.net,Richtextbox,我有一个程序,可以读取SQL Server中的NTEXT列,并在富文本框中显示输出。对于其中一个值,它会抛出一个OutofMemoryException 我使用SqlDataAdapter读取该列,然后将该列的内容附加到stringBuilder中。我得到了以下代码行的异常 rtbEventDesc.Text = stringBuilder.ToString(); 显示的消息是: 内存不足,无法继续执行程序 我该如何解决这个问题?此特定行的列大小为9 MB,这并不多。我的建议是将列转储到临时文
OutofMemoryException
我使用SqlDataAdapter
读取该列,然后将该列的内容附加到stringBuilder
中。我得到了以下代码行的异常
rtbEventDesc.Text = stringBuilder.ToString();
显示的消息是:
内存不足,无法继续执行程序
我该如何解决这个问题?此特定行的列大小为9 MB,这并不多。我的建议是将列转储到临时文件,然后使用以下命令读取文件:
rtbEventDesc.LoadFile(tmpFileName);
希望能有帮助
编辑 如果无法使用文件保存文件,可能可以使用内存流:
Byte[] text = GetByteArrayFromSqlAdapter();
using (MemoryStream ms = new MemoryStream())
{
ms.Write(text, 0, text.Length);
rtbEventDesc.LoadFile(ms, RichTextBoxStreamType.RichText);
}
编辑II RichTextboxControl似乎不够好,无法加载9Mb的文件,它的性能也没有更好,主应用程序被卡住,并在窗口标题中显示(没有响应)消息 这里有两个选项:
9MB相当多。。。这实际上超出了基于堆栈的普通对象的范围。在将对象分配到文本框之前,您是否检查过该对象是否仍然有效?这可能是您的案例@Yogendra,而不是我的案例。我需要显示该列的全部内容。然后用户可以选择做她想做的事情。这是在分配还是在ToString()上抛出?你能把代码一分为二,看看是哪一个抛出的吗?@SimonMourier我的代码有了一些进步,我确信ToString()调用正在工作。当我对富文本框的Text属性进行赋值时,它失败了。嗨,Daniel,这正是我想要做的,但是这段代码在服务器上的程序集中运行,我可能有也可能没有写入文件的必要权限。是否可以用内存流来代替?我目前正在探索这个选项。你可以使用MemoryStream,但我没有测试它。希望能有所帮助。我正在尝试使用您发布的代码。这个特定的表单现在在标题栏中显示了一个(没有响应)。哦,我明白了,加载文件的时间太长了,RichTextbox似乎不能很好地处理大文本。您有两种选择:1)使用BackgroundWorker或任何其他异步机制加载文件,或搜索其他性能更好的文本框。我建议您使用Scincilla.NET或AvalonEdit。