首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在WinForms中使用ErrorProvider时CPU使用率高,原因是什么?

在WinForms中使用ErrorProvider时CPU使用率高,原因是什么?
EN

Stack Overflow用户
提问于 2011-03-31 21:26:09
回答 2查看 446关注 0票数 1

我有一个应用程序,当ErrorProvider控件在几个控件上连续设置闪烁图标时,它会进入高CPU使用率(随着时间的推移而变得缓慢)。

高CPU使用率不是立即出现的,而是在应用程序达到100% CPU之前缓慢增长。

当没有显示错误时,CPU将恢复正常。ErrorProvider占用这么多CPU时间是正常的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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被标记为已修复,但最新的评论说它正在调查中。

票数 2
EN

Stack Overflow用户

发布于 2011-03-31 21:31:47

这是不正常的。很可能是内存或窗口句柄泄漏了。从Taskmgr.exe的Processes选项卡开始诊断。View + Select Columns and tick Memory (提交大小)、句柄、用户对象和GDI对象。在应用程序运行时观察这些列的值。

稳步增加的值表示代码中存在可能导致cpu使用率上升的问题。一个非常典型的问题是泄漏用户句柄,这是由于使用Controls.Remove()或Controls.Clear()从表单中删除控件并忘记处理这些控件而导致的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5500596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档