【发布时间】:2015-10-02 14:13:18
【问题描述】:
所以我们有一个应用程序,它的大小相当大,运行时平均占用 75,000kb 的内存(打开其他窗口时会上升和下降,但不会太多)。
最近,我们的支持团队接到了一些关于末日红十字会的电话,因为它被亲切地称为。
这出现在没有任何自定义的标准 WinForms 控件的控件上(它们也没有放置在任何自定义容器中)。
经过一些研究,我们发现它似乎只有在分配给该控件的绘制事件中发生异常时才会触发。但是,这些控件没有用于绘制的事件,这意味着它必须是底层的。
我们的思考过程是,这可能发生在内存非常低的系统上,但这有点像在黑暗中刺伤。支持这一理论的是这个问题是间歇性的。
数据网格视图上的《毁灭战士》大红十字
世界末日大红十字会无处不在
问题只是为了确认我们对内存问题的怀疑,或者给我们另一个理由,并希望有办法绕过它。
注意:-
我知道 WinForms 现在有点老了,并没有得到真正的支持,但是这个应用程序非常大,因此无法建议转换为 WPF 或其他任何东西。
【问题讨论】:
-
发生这种情况时通常会出现异常...您是否尝试过设置全局异常处理程序以查看是否属于您的情况?
-
不幸的是,我们无法真正复制它,因为我们的机器有大量内存。我们已经放置了一行代码,用于在触发时将异常文本写入隐藏文本文件,但是,这在接下来的几天内无法分发给我们的客户。
-
这是静态缺陷吗?我的意思是-它是“自行发生”还是您可以将其追溯到某些用户操作(重新调整窗口大小)?这些客户端是否得到了正确的渲染?
-
是的,他们确实得到了正确的渲染,如上所述,这是一个间歇性问题,发生的事情似乎是随机的(我知道不可能是这种情况)但不,我们无法将其追溯到用户到目前为止的行动。
-
这些控件都没有使用 OwnerDraw?