内存使用率很高

本文关键字:使用率 内存 | 更新日期: 2023-09-27 18:00:59

我的windows应用程序有一个Form,上面只有一个RichTextBox。在运行时,我将向其中加载一个文本文件。文本文件的大小约为18MB。当我运行应用程序时,任务管理器中显示的初始内存大小是9 MB。在RichTextBox加载语句执行后不久,内存大小将变为164MB。为什么18 MB的文本文件正在消耗164MB

为了进一步研究,我在Form上放了一个Button,并点击它,称为处理RichTextBoxGC.Collect()。但这并不能将内存回收到初始级别。内存使用量降至仅55MB

有人能告诉我为什么我没有把全部的记忆释放出来吗?

以下是用于填充RichTextBox:的代码

using (FileStream fileStream = File.OpenRead(m_strFileName))
            {
                MemoryStream memStream = new MemoryStream();
                memStream.SetLength(fileStream.Length);
                fileStream.Read(memStream.GetBuffer(), 0, (int)fileStream.Length);
                rchtxtTextFile.LoadFile(memStream, RichTextBoxStreamType.PlainText);
                memStream.Dispose();
            }

我的应用程序将允许用户加载一些大文件,这些文件实际上是HTML文件。用户将在RichTextBox编辑器中对HTML标记进行一些更正。这些文件的大小可能在140MB左右。加载此文件会导致内存不足异常。这就是为什么我发现了为什么当表单被处理时,整个内存并没有被回收。

内存使用率很高

因为RichTextBox是众所周知的重控制。它需要创建内部结构,以便能够管理内容的自定义格式。

如果您只需要可视化文本,而不需要任何特殊格式,请考虑使用简单的多行TextBox

我在表单上放了一个按钮,点击后称为Dispose ofRichTextBox和GC.Collect((。但这无法回收内存至初始水平。内存使用量降至55MB

GC不能保证收回所有东西。GC.Collect只是向.NET环境发出的开始扫描垃圾的信号。内存的相关部分已经被回收,这是一件好事。其余部分由RichTextBox生成的引用占据。

编辑

当然,为了正确理解应用程序的内存分布,您需要在内存分析器中执行它。

根据RTF文件的大小判断(18MB对于文本来说是很大的,即使是rich文本(,我猜它包含图片。出于向后兼容性的原因,大多数Windows应用程序中的RTF格式在保存图片时使用两种格式-原始和未压缩的WMF(Windows元文件格式(。

一些富文本控件(如DevExpress(支持关闭此功能