代码改变世界

WP7 App性能优化(7):其他性能要点

2010-12-25 19:34  MagicKing110  阅读(2573)  评论(0编辑  收藏  举报

本篇主要讨论影响Windows Phone 7应用程序性能的另外几个要素。包括用户输入、进度条、网络请求等。

用户输入

Windows Phone 7的用户输入包括Manipulation 事件、Mouse事件和Touch 事件。

使用Manipulation 事件代替Mouse和Touch事件

Manipulation 事件是推荐的用户输入处理方式。从性能和硬件兼容性方面考虑,如果没有特殊的需求,应当避免在WP7上的Silverlight应用程序中使用Mouse事件。相反,应当用Manipulation 事件来替代。

T:System.Windows.Input.Touch类提供了E:System.Windows.Input.Touch.FrameReported事件用以获得每个单独的触摸点。尽管该事件在Windows Phone 7中仍然支持,但是不推荐用他来处理手势,如缩放之类。如果不需要获得每个单独触摸点,则应使用Manipulation 事件。

关于如何使用Manipulation 事件的更多信息,请参考How to: Handle Manipulation Events

 

ProgressBar

在处理一个很消耗时间的操作时,应该通过一个ProgressBar向用户指示应用程序还在工作。然而,当前的ProgressBar的实现会降低应用程序的性能。

使用PerformanceProgressBar 代替ProgressBar

为了解决ProgressBar的性能问题,微软创建了一个替代的PerformanceProgressBar。PerformanceProgressBar将动画从UI线程移到了构图线程。

 

Web服务请求

WebClient是一个HttpWebRequest的包装类,用以处理Web服务请求。WebClient可能更容易使用,因为它在程序的UI线程中返回数据,你在自己的应用中不需要管理数据在线程间的调度。然而,如果你的应用在UI线程中处理Web服务,UI将会暂停响应直到处理完毕,这会带来很糟糕的用户体验,尤其是要处理的数据集比较大时。

使用HttpWebRequest 代替WebClient

使用HttpWebRequest 代替WebClient进行Web服务请求。在异步请求线程中处理返回数据,然后使用BeginInvoke方法将数据传送到UI。

 

处理大量的小数据量请求

为节省电量,操作系统在预置的一段超时时间后会关闭设备的无线通信功能。如果应用程序要发送大量的小数据量请求,建议将这些请求并行执行而不是一个一个的串行执行。这将保证设备的无线通信不会进入休眠状态,以避免无线通信频繁的为每个请求打开、关闭。

转到:WP7 App性能优化(0):索引页