richTextBox 字符数限制?

2024-05-04

我在丰富的文本框中存储大量文本时遇到问题。

我正在尝试读取一个相当大的文本文件(从 90mb 到 450mb 的任意位置),并将我读到的内容放入富文本框中。它可以在一个简单的程序中运行,但是当我在一个复杂的程序中运行时,我会得到一个 OutOfMemory 异常。

需要注意的一件事是,当我退出简单程序时,我在程序返回 0 之前收到 OutOfMemory 异常。

这是我的简单程序的代码:

    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 的字符,但这在中途是有意义的,因为我可以加载文本,但我猜程序在之后转储它时出现问题。

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


至于将大量文本转储到丰富的编辑中,这通常会非常慢,以记事本为例,尝试用它打开一个 2MB 的文件。我认为更高级的文本编辑器处理这些的方式是通过“虚拟控件”,我知道这些通常与列表控件一起使用,并且我也会考虑与文本框一起使用。它们的行为/功能基本上与您正常的日常控制相同,但无需尝试一次渲染大量文本,它们具有“屏幕空间外”的虚拟空间。

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

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

Edit 2现在我知道你用的是什么系统了,我去看了一下,文档比 64K 限制稍微复杂一点。首先,这不是指 64 KB,而是指 64000 个字符。另请注意,您可以根据需要更改此限制。其次,如果您使用 SF_TEXT 而不是 SF_RTF 进行流式传输,则此限制没有任何影响,我想这就是 .NET 接口背后所发生的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

richTextBox 字符数限制? 的相关文章

随机推荐