深蓝互联专注深圳物联网方案开发定制、小程序开发、SaaS系统、APP开发和深圳软硬件方案公司欢迎咨询邮箱:wisepu@szdbi.com   电话:13530005652   联系我们   |   网站地图   



WP7 App性能优化(6):理解线程

来源:     发布:     点击:

UI线程

UI线程是WP7中的Silverlight应用程序的主线程,其功能和Silverlight浏览器插件的主线程很类似。以下列出了UI线程负责处理的任务:

  • 处理用户输入
  • 解析XAML并创建对象
  • 绘制所有元素首次呈现的视图
  • 处理每一帧的回调,执行其他用户代码

因为UI线程要负责处理用户输入、绘制新视图、回调用户代码,所以要尽可能保证该线程空闲。维持一个轻型的UI线程是创建高响应性应用的关键。前面博文中的避免阻塞UI线程介绍了一些在应用启动时避免阻塞UI线程的方法。

 

构图线程

构图线程会分担一些通常由UI线程处理的工作,因此可以提高WP7上的Silverlight应用程序的性能。构图线程合成了图形纹理并将其递交给GPU进行绘制。在WP7上的SIlverlight中,storyboard驱动的动画运行在构图线程中,并且会被设备的GPU在一个称为自动缓存的进程中自动缓存和处理。

构图线程会处理一些简单的与RenderTransformProjection属性关联的动画。以下列表显示了构图线程经常书里的动画。

注意:为了充分利用构图线程,缩放(scale)转换必须小于原始大小的50%。

另外,P:System.Windows.UIElement.OpacityP:System.Windows.UIElement.Clip属性也是由构图线程处理的。然而,如果使用了Opacity mask或非矩形剪辑的话,这些操作将被传递给UI线程处理。

 

动画与线程

正如上文所言,storyboard驱动的动画由构图线程处理。这是很完美的,因为构图线程会将这些递交给GPU处理。另外,如果CPU超负荷时,构图线程比UI线程运行的更加频繁。然而有些情况,storyboard动画无法满足应用程序的需要。这时,应当选择在代码中驱动动画。这些动画会被逐帧处理。很多情况下,这是合理的,但是你应该知道在逐帧回调中运行动画的影响。

逐帧回调严格的在UI线程中处理。动画将会以UI线程能够处理的速度进行更新,这就依赖于应用程序正在执行什么操作,动画的呈现可能不会像运行在构图线程中一样平滑。当在代码中更新动画时,元素不会像通过storyboard更新时一样自动缓存。如果在这些元素中手动添加了位图缓存,转换和混合操作将会被递交给GPU处理,但是动画仍然是在逐帧回调中更新,由UI线程处理。这种情况下,动画更新会和UI线程的帧频一致。

 

后台线程和异步编程

为了避免复杂的处理阻塞UI线程,可以将这些处理卸载到辅助线程中,也就是在后台线程中异步处理。例如,所有的Web Service的 API都被设计为异步处理以免他们阻塞UI线程。如果使用后台线程,必须提供一种机制将后台线程中的数据转移到UI线程中。这既可以通过共享变量和事件进行数据传递,也可以使用M:System.Windows.Threading.Dispatcher.BeginInvoke(System.Action)方法将数据发送给UI线程。另外iayekeyi使用T:System.ComponentModel.BackgroundWorker类和其事件进行基于异步机制的处理。更多信息请参考How to: Use a Background Worker

深蓝互联成立于2013年,是一家物联网硬件开发及软件应用服务商,获得多次获得国家高新技术企业资质的企业。深蓝互联专注软硬件技术开发的专业性技术公司。我们从事软硬件开发十年,擅长SaaS 平台开发、APP小程序开发、软硬件结合开发,在视觉识别处理、数据架构、云计算、多线程高并发和集群、数据安全加密和防护方便有很深的技术积累。

 

我们拥有专业优秀的设计和技术团队,以极具创意的 UI 设计、精湛卓越的开发技术,专业的网络策划团队。公司多年来投入打造物联网SaaS平台,集成了公司研发的多款智能物联网终端(智能鲜米机、生鲜售货机、自助洗车机、小区电瓶车充电系统等)。

 

公司一直坚持以研发为导向,打造软硬件结合的物联网平台系统。将一直坚持提高开发的技术实力更好的为我们的客户服务!

 

文章来自深蓝互联http://www.szdbi.com/webxt/394.html转载请注明出处!

相关文章

无相关信息


深圳市龙华新区龙观西路2号宝龙大厦A903(与布龙路交汇处)