如何将动态代码段更改为静态代码段
本文关键字:代码 静态 段更改 动态 | 更新日期: 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,看看这是否是罪魁祸首。