代码改变世界

WP7 App性能优化(5):加快应用程序启动速度(下)

2010-12-18 22:46  MagicKing110  阅读(2125)  评论(4编辑  收藏  举报

有很多途径可以提升Windows Phone 7应用程序载入和启动时的性能。本节将继续讨论这些话题。

《WP7 App性能优化(5):加快应用程序启动速度(上)》一文中,我们讨论了通过

  • 使用启动画面
  • 最小化应用程序集的大小
  • 将程序集分解为多个小的程序集
  • 减少构造函数和Loaded事件中代码

等方法加快应用程序启动速度,本文将继续这一话题进行探讨,了解另一些可用于加速程序启动的方法。

 

监控独立存储的使用

P:System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings对象在第一次使用时(通常是应用程序启动时)从存储中加载并反序列化。可以在程序中创建一个包含计时器的帮助属性以测量反序列化应用程序设置所消耗的时间。如果数据序列化所用时间超过了100毫秒,就应该考虑将该过程移动到一个后台线程中执行。

如果要用来自独立存储的数据填充一个页面,应该在页面中创建一个ObservableCollection对象用以保存数据,并立即将该对象绑定到UI元素。然后用来自独立存储的数据填充这个ObservableCollection。如果需要,可以通过使用M:System.Windows.Threading.Dispatcher.BeginInvoke(System.Action)方法将数据填充工作分解到多个调用中。

 

避免阻塞UI线程

很多操作会阻塞UI线程而减缓程序的启动。以下服务和API会阻塞线程:定位服务、推送通知、网络信息、收音机。

位置服务

Windows Phone 7手机启动后,会花费几秒钟的时间以等待发生在GeoCoordinateWatcher上的PositionChanged事件。取决于DesiredAccuracy的设置,PositionChanged的事件首次发生可能需要3-13秒的时间。这是因为定位服务的启动、卫星搜索、及其他操作都要消耗时间。如果Windows Phone已经在运行中,该操作不会花费太长时间,通常PositionChanged事件会在500毫秒内发生。如果你有依赖于定位事件发生的函数调用,那么就会阻塞UI线程,减缓程序的启动。更多如何使用定位服务的信息,请查看Location for Windows Phone

推送通知

微软推送通知(MPN)服务允许Web服务向WP7应用程序推送更新。因为对推送通知服务的一些调用可能会需要较长时间才会返回,因此推送通知API是异步的。应该避免UI线程等待推送通知服务返回结果的情况。例如,你可能会在UI线程中为推送通知服务创建并打开一个Chanel,但是你不应该造成UI线程在等待其返回结果的情况。关于推送通知的更多信息请访问

How to: Receive Push Notifications in an Application for Windows Phone.。

网络信息

在Windows Phone启动时,首次调用M:System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable可能会花费20秒的时间。这是因为Windows Phone首先要尝试遍历所有的可用网络链接。关于如何在后台调用GetIsNetworkAvailable方法,请期待本系列博文下一篇《后台线程与异步编程》。

收音机

Windows Phone启动时需要3秒以上时间等待调用FMRadio返回的结果。在收音机初始化后,等待这些调用返回结果的时间将减少到100毫秒。不应该在UI线程中创建和调谐收音机。应该通过一个后台线程来做这些工作。更多信息请期待本系列博文下一篇《后台线程与异步编程》。

 

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