Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 富文本框-文本分配导致OutofMemoryException_C#_.net_Richtextbox - Fatal编程技术网

C# 富文本框-文本分配导致OutofMemoryException

C# 富文本框-文本分配导致OutofMemoryException,c#,.net,richtextbox,C#,.net,Richtextbox,我有一个程序,可以读取SQL Server中的NTEXT列,并在富文本框中显示输出。对于其中一个值,它会抛出一个OutofMemoryException 我使用SqlDataAdapter读取该列,然后将该列的内容附加到stringBuilder中。我得到了以下代码行的异常 rtbEventDesc.Text = stringBuilder.ToString(); 显示的消息是: 内存不足,无法继续执行程序 我该如何解决这个问题?此特定行的列大小为9 MB,这并不多。我的建议是将列转储到临时文

我有一个程序,可以读取SQL Server中的NTEXT列,并在富文本框中显示输出。对于其中一个值,它会抛出一个
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的文件,它的性能也没有更好,主应用程序被卡住,并在窗口标题中显示(没有响应)消息

这里有两个选项:

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

  • 使用其他性能更好的文本框。我建议您使用或


  • 9MB相当多。。。这实际上超出了基于堆栈的普通对象的范围。在将对象分配到文本框之前,您是否检查过该对象是否仍然有效?这可能是您的案例@Yogendra,而不是我的案例。我需要显示该列的全部内容。然后用户可以选择做她想做的事情。这是在分配还是在ToString()上抛出?你能把代码一分为二,看看是哪一个抛出的吗?@SimonMourier我的代码有了一些进步,我确信ToString()调用正在工作。当我对富文本框的Text属性进行赋值时,它失败了。嗨,Daniel,这正是我想要做的,但是这段代码在服务器上的程序集中运行,我可能有也可能没有写入文件的必要权限。是否可以用内存流来代替?我目前正在探索这个选项。你可以使用MemoryStream,但我没有测试它。希望能有所帮助。我正在尝试使用您发布的代码。这个特定的表单现在在标题栏中显示了一个(没有响应)。哦,我明白了,加载文件的时间太长了,RichTextbox似乎不能很好地处理大文本。您有两种选择:1)使用BackgroundWorker或任何其他异步机制加载文件,或搜索其他性能更好的文本框。我建议您使用Scincilla.NET或AvalonEdit。