如何将动态代码段更改为静态代码段

本文关键字:代码 静态 段更改 动态 | 更新日期: 2023-09-27 17:52:46

我在这个函数中得到内存不足警报,称为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); ?

如何将动态代码段更改为静态代码段

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

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

内存不足的异常可能显示对行与"调用",但几乎肯定是来自添加到richTextBox。

在debug->exceptions->CLR exceptions旁打勾"thrown",以便在调试时查看。

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