在 WinForms 中使用 ErrorProvider 时 CPU 使用率很高,为什么?
当 ErrorProvider 控件在多个控件上连续设置闪烁图标时,我的应用程序会进入高 CPU 使用率(随着时间的推移缓慢)。
高 CPU 使用率不会立即出现,而是会缓慢上升,直到应用程序达到 100% CPU。
当没有显示错误时,CPU 将恢复正常。 ErrorProvider 占用如此多的 CPU 时间正常吗?
I've got an application that goes into high CPU usage (slowly over time) when the ErrorProvider control sets the blinking icon continuously on several controls.
The high CPU usage is not immediate but have a slow ramp until the application hits 100% CPU.
When there is no error shown then CPU goes back to normal. Is it normal that the ErrorProvider takes so much CPU time?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这不正常。您很可能正在泄漏内存或窗口句柄。使用 Taskmgr.exe 的“进程”选项卡开始诊断此问题。查看+选择列并勾选内存(提交大小)、句柄、USER 对象和 GDI 对象。在应用程序运行时观察这些列的值。
稳定增加的值表明代码中存在可能导致 CPU 使用率上升的问题。一个非常经典的问题是泄漏 USER 句柄,这是由于使用 Controls.Remove() 或 Controls.Clear() 从表单中删除控件并忘记释放这些控件而引起的。
This isn't normal. In all likelihood you are leaking memory or window handles. Start diagnosing this with Taskmgr.exe, Processes tab. View + Select Columns and tick Memory (Commit size), Handles, USER objects and GDI objects. Observe the values of these columns while your app runs.
Steadily increasing values indicates a problem in your code that can drive up the cpu usage. A pretty classic problem is leaking USER handles, induced by removing controls from your form with Controls.Remove() or Controls.Clear() and forgetting to dispose those controls.
根据此 MS connect 错误报告: 图形资源ErrorProvider 泄漏
这个 bug已标记为已修复,但最新评论表示正在调查中。
According to this MS connect bug report: Graphical Resources Leak In ErrorProvider
This bug is marked as fixed but the most recent comment says it is under investigation.