首页 / C# / C#-WndProc处理程序效率低下
C#-WndProc处理程序效率低下
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-WndProc处理程序效率低下,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含930字,纯文字阅读大概需要2分钟。
内容图文
![C#-WndProc处理程序效率低下](/upload/InfoBanner/zyjiaocheng/653/e2a0d60c9a39450096ac1f94932c9863.jpg)
我的表单中有以下WndProc处理程序.它应防止水平移动表单(仅允许垂直移动):
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (!ShowCaption && m.Msg == 0x216)
{ // Trap WM_MOVING
var rc = (RECT)Marshal.PtrToStructure(m.LParam, typeof(RECT));
int w = rc.right - rc.left;
rc.left = this.Left;
rc.right = rc.left + w;
Marshal.StructureToPtr(rc, m.LParam, false);
}
base.WndProc(ref m);
}
它可以工作,但是当用户移动表格时,CPU使用率会大大增加.在此功能中什么可能效率如此低下,并且有什么方法可以解决?
解决方法:
我尝试了您的代码,并且效果很好.它没有像您所说的那样使100%的CPU饱和,仅占用了约16%的CPU.
我想需要花费很长时间来处理表单的绘制或背景窗口的绘制(而不是wndproc实现).
尝试通过添加等待时间来限制表单每秒可以执行的重绘次数
System.Threading.Thread.Sleep(10);
在这行之后:
Marshal.StructureToPtr(rc, m.LParam, false);
拖动时睡眠10毫秒可限制您的窗体每秒重绘100次以上,同时不使用某些CPU.
编辑:忘了提及添加睡眠改变了我盒子上的?16%至?12%.
内容总结
以上是互联网集市为您收集整理的C#-WndProc处理程序效率低下全部内容,希望文章能够帮你解决C#-WndProc处理程序效率低下所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。