我有一个应用程序,当ErrorProvider控件在几个控件上连续设置闪烁图标时,它会进入高CPU使用率(随着时间的推移而变得缓慢)。
高CPU使用率不是立即出现的,而是在应用程序达到100% CPU之前缓慢增长。
当没有显示错误时,CPU将恢复正常。ErrorProvider占用这么多CPU时间是正常的吗?
发布于 2012-01-11 20:44:18
根据此MS connect错误报告:Graphical Resources Leak In ErrorProvider
当存在与控件关联的错误时,ErrorProvider组件将在其右侧显示一个闪烁的图标。我发现每当图标闪烁时,就会在System.Drawing.Internal.DeviceContexts内部列表中添加一个新的DeviceContext。当我在ErrorProvider对象上调用Dispose()方法时,DeviceContexts列表没有被清除。
结果:默认情况下,该图标每250毫秒闪烁一次,因此每秒向System.Drawing.Internal.DeviceContexts列表中添加4个DeviceContext对象。当ErrorProvider处于活动状态且BlinkStyle为AlwaysBlink时,列表将无限增长...当这个列表非常大时(我在500000+对象中见过!)应用程序绘制操作非常慢:(
这个bug被标记为已修复,但最新的评论说它正在调查中。
发布于 2011-03-31 21:31:47
这是不正常的。很可能是内存或窗口句柄泄漏了。从Taskmgr.exe的Processes选项卡开始诊断。View + Select Columns and tick Memory (提交大小)、句柄、用户对象和GDI对象。在应用程序运行时观察这些列的值。
稳步增加的值表示代码中存在可能导致cpu使用率上升的问题。一个非常典型的问题是泄漏用户句柄,这是由于使用Controls.Remove()或Controls.Clear()从表单中删除控件并忘记处理这些控件而导致的。
https://stackoverflow.com/questions/5500596
复制相似问题