WPF优化:Freezable冻结对象

系统 1695 0

WPF 虽然很美观,效果很炫,但是对资源的消耗也很大,尤其是初次接触 WPF 的人,因为很多地方虽然实现了想要的效果,但是由于经验问题,所以也会造成很大的资源浪费,好的程序,需要更好的 优化 。虽然可能只是节省了很少的一点资源,但是对整体程序运行的速度与稳定性来说,也许就起到了决定性的作用;每个地方都能做到一点 优化 ,那么在成个程序中, 优化 的效果就会很明显,流畅、稳定,才是一个程序的健康状态。

在MSDN上看到的这个说明“对象行为”,上面说到,每一个 SolidColorBrush 占用的大小,当冻结的时候,需要212字节,未冻结的则需要972字节,即使单位很小,但是差距还是非常大的,通常我们写程序的时候,这类的对象都不会想到冻结它,当然,冻结的对象也意味着不能被修改,冻结等于只读。当 SolidColorBrush 当成资源对象的时候,这个对象几乎就是不会被修改的。所以,我们有必要在这种情况下将该对象冻结,已达到节省资源和优化程序的目的。克隆的对象,就相当于对当前对象的解冻行为。

      
         1
      
       SolidColorBrush myBrush = 
      
        new
      
       SolidColorBrush(Colors.Yellow); 
      
         2
      
      
        //
      
      
        如果可以冻结
      
      
         3
      
      
        if
      
       (myBrush.CanFreeze) 
      
         4
      
       { 
      
         5
      
      
        //
      
      
        冻结对象,使之成为只读,提高性能
      
      
         6
      
           myBrush.Freeze(); 
      
         7
      
       } 
      
         8
      
       FreezableBtn.Background = myBrush; 
      
         9
      
      
        //
      
      
        判断对象是否冻结
      
      
        10
      
      
        if
      
       (myBrush.IsFrozen) 
      
        11
      
       { 
      
        12
      
      
        //
      
      
        如果是只读对象,则Clone对象
      
      
        13
      
           SolidColorBrush CloneBrush = myBrush.Clone(); 
      
        14
      
      
        //
      
      
        做更改
      
      
        15
      
           CloneBrush.Color = Colors.Red; 
      
        16
      
           FreezableBtn.Background = CloneBrush; 
      
        17
      
       } 
      
        18
      
      
        else
      
      
        19
      
       { 
      
        20
      
      
        //
      
      
        如果对象未被冻结,则可直接修改对象
      
      
        21
      
           myBrush.Color = Colors.Red; 
      
        22
      
       }
    

上面这段程序对对象是否冻结做了验证,如果需要修改,那么,可以克隆一个对象对其进行修改。 在XAML文件中创建的对象也有这个属性。

      
        1
      
      
        <
      
      
        SolidColorBrush 
      
      
        x:Key
      
      
        ="MyBrush"
      
      
         PresentationOptions:Freeze
      
      
        ="True"
      
      
         Color
      
      
        ="Red"
      
      
        />
      
    

继续寻找其他的优化方法,争取将程序做到快速且稳定。

 

http://luacloud.com/2011/wpf-performance-optimization-2.html

WPF优化:Freezable冻结对象


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论