0

我在这个函数中出现内存不足警报,称为500K时间:

public void DoStuff(string msg)
{
     rtfTerminal.Invoke(new EventHandler(delegate
            {
                rtfTerminal.SelectedText = string.Empty;
                rtfTerminal.AppendText(msg);
                rtfTerminal.ScrollToCaret();

            }));

}

在我声明的全局范围内:

  private System.Windows.Forms.RichTextBox rtfTerminal;
  • 我想我new EventHandler每次打电话都会内存不足,我该如何避免这种情况?
  • 我因为内存不足而合理 rtfTerminal.AppendText(msg);吗?
4

2 回答 2

1

new EventHandler不是一个大问题,你不能真正看到(但存在)的匿名对象也不是:这两者都将是短暂的,即 GEN-0 并且几乎可以免费收集。此外,如果事情开始运行不足,GC 将启动,所以这不应该是一个问题。不断将文本添加到RichTextBox无限制可能是一个问题。我会尽量避免这种情况。文件通常是从长时间运行的进程中转储输出的更好选择。

最终,如果这没有帮助:您需要使用内存分析器之类的东西来查看内存的去向。

于 2013-01-14T12:32:17.380 回答
1

内存不足异常可能与“invoke”调用相对应,但几乎可以肯定来自添加到richTextBox。

在 debug->exceptions->CLR Exceptions 中勾选“throw”以在调试时看到这一点。

每毫秒 100 个 unicode 字符应该每小时消耗大约 686MB,检查任务管理器中的可用 MB 以查看这是否是罪魁祸首。

于 2013-01-14T13:32:01.977 回答