2009-07-16 109 views
0

我在将丰富文本存储在富文本框中时遇到了问题。richTextBox字符限制?

我想读一个相当大的文本文件(任何地方从90mb到450mb),并把我读过的文本框放在一个文本框中。它在一个简单的程序中工作,但是当我在一个复杂的程序中执行时,我得到一个OutOfMemory异常。

有一点要注意的是,当我离开我的简单的程序,我得到一个内存不足例外的程序返回0

权利之前这里是我的简单的程序代码:

array<String^>^ strArray; 
    StreamReader^ sr; 
    String^ dummyStr; 
    int dummyInt; 

     sr = gcnew StreamReader("C:\\testsize.txt"); 

     while((dummyStr = sr->ReadLine())!= nullptr) 
     { 
      dummyInt++; 
     } 
     sr->Close(); 

     sr = gcnew StreamReader("C:\\testsize.txt"); 
     strArray = gcnew array<String^>(dummyInt); 
     for(int i=0; i < strArray->Length; i++) 
     { 
      strArray[i] = sr->ReadLine(); 
     } 
     richTextBox1->Lines = strArray; 

我有一个类似于我的项目中的代码片段,并且当我执行richTextBox1-> Lines = strArray行时,会弹出一个异常。

我已经阅读了富文本框的文档,它说最大的限制是64KB的字符,但这是有道理的一半,因为我可以加载文本,但我猜测程序有问题倾倒它之后。

任何想法?我一直在试图找到一些没有限制的自定义控件,但目前为止没有成功。

+0

如果你让我们知道这是什么平台/ API,可能能够帮助我定制控制。我对QT不熟悉,所以它可能是? – DeusAduro 2009-07-16 17:35:29

+0

这是在Windows Vista,VS2008,C++ – Dinoo 2009-07-16 17:39:20

回答

1

至于倾倒大量的文本到一个丰富的编辑,这通常会非常慢,以记事本为例,尝试打开一个2MB的文件。我认为更高级的文本编辑器处理这些问题的方式是通过“虚拟控制”来实现的,我知道这些控件经常与列表控件一起使用,我也会用文本框来思考。他们的行为/功能与日常控制的功能基本相同,但不会尝试一次渲染文本,他们虚拟空间不在屏幕空间。

只要你的内存不足问题......我很困惑,你说错误发生在你的示例代码的最后一行,当你尝试将文本转储到它时。你还提到限制是64KB,所以现在假设你的文件非常大,就像你说的那样......这是有道理的,你会尝试将超过64KB的文本转储到64KB的限制框中。我错过了什么吗?

编辑我重读了一些我看你现在问什么问题的,所以在简单的程序,你得到的一切加载完成后的错误,程序退出时。将一个调试点放入析构函数中,并确切地查看发生此错误的位置。

编辑2现在我知道你在哪个系统上了,我去看了一下,文档比64K限制复杂一点。首先不是指64 KB而是64000个字符。另请注意,您可以随意更改此限制。其次,如果您使用SF_TEXT而不是SF_RTF进行流式处理,则此限制不起作用,我会想象在.NET界面后面会发生什么。