zoukankan      html  css  js  c++  java
  • WP7 App性能优化(6):理解线程

    http://www.gwewe.com/dev/topics/1012211222.html

    Windows Phone 7中的Silverlight图形线程架构特别针对设备做了优化。Windows Phone 中的Silverlight 支持用一个构图线程作为UI线程的附加。要知道如何对Windows Phone 7做性能优化,理解WP7中的两个主线程和后台线程的使用是非常重要的。
     

    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

  • 相关阅读:
    tftp服务器
    iw工具的使用
    六、【ioctl】应用程序和驱动程序中的ioctl
    位反转现象(Bit Flip)
    openwrt有线网卡的停用与开启
    寒假小记
    ARMLinux汇编到ADS汇编转换需要注意的问题
    c function pointer example
    (转)解决mysql“Access denied for user 'root'@'localhost'”
    c语言 面向对象的栈
  • 原文地址:https://www.cnblogs.com/xingchen/p/1977239.html
Copyright © 2011-2022 走看看