我在这个函数中失去内存警报,称为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);
?答案 0 :(得分:1)
new EventHandler
不是一个大问题,也不是你真正看不到的匿名对象(但存在):这两个都是短命的,即GEN-0并且几乎是免费的去收集。此外,如果事情开始变低,GC将启动,因此不应该成为问题。不加限制地不断向RichTextBox
添加文本可能是个问题。我会尽量避免这种情况。文件通常是从长时间运行的进程转储输出的更好选择。
最终,如果这没有帮助:你需要使用类似内存分析器的东西来查看内存的去向。
答案 1 :(得分:1)
内存不足异常可能会显示“调用”调用的行,但几乎可以肯定来自添加到richTextBox。
针对debug->例外 - > CLR抛出“抛出”以在调试时看到此异常。
每个ms的100个unicode字符应该每小时消耗大约686MB,检查任务管理器中的可用MB以查看这是否是罪魁祸首。