【转】Windows Mobile 进阶系列——多窗体应用的性能与编程调试1
阅读(13) 评论(0)发表时间:2009年02月14日 14:22
摘要:在资源有限的Windows Mobile移动设备上面,具有多窗体的应用程序的性能问题是值得我们去关注的。本文阐述了如何优化多窗体应用程序的性能,提高加载速度的方案以及在性能调试过程中
Windows Mobile,多窗体,性能,调试,C# 有朋友说这个系列的前面几篇文章太理论了,不好懂。我很理解,不过我的确得把一些理论性的文章安排在前面,也请筒子们耐心,从现在开始后面的文章会比较轻松一点 J 窗体的加载主要是在Form的load事件处理函数里面完成的。所以,我们首先需要尽量使Form_Load里面的代码最小化。把那些负荷比较重的任务放到后台线程上完成,尽量不去阻塞和“耽误”加载窗体的线程。 熟悉.Net Framework的朋友应该知道,.NET Framework2.0以上的版本中引入了一个叫做BackgroundWorker的组件用来实现上述功能。把一些高负荷的工作放到BackgroundWorker组件中去执行,不对主线程造成阻塞。遗憾的是目前在.NET CF中并不支持这个组件,不过你仍然 下面的示例,对使用和不使用线程池做同样的任务所用的时间做了比较。 我们先把一个比较重的任务放到主线程上去做: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 所做的工作就是更新form的标题1000次。结果我们可以在output栏看到如下的输出: ![]() 可以看到,在Form2的加载过程中,在这样一个任务上(我们仅仅用来模拟某些必不可少的工作)花费了接近1秒钟(916ms)时间。而在这一秒钟时间内, 下面是使用Threadpool的一个解决方案: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 线程池的某一条线程会去执行挂载在WaitCallback 委托上的“等待回调”的HeavyWork方法,并通过Control.BeginInvoke()方法以异步的方式更新Form的标题。我们在output ![]() 我们看到,这种利用多线程的异步方式仅花费了169ms,与前面的结果相比,节约了800ms 注意:不同的设备,不同的调试环境所用的时间可能略有不同 当然,并不是非要启用线程的线程池的线程。你完全可以自己 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步