• WPF优化:Freezable冻结对象


    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


  • 相关阅读:
    JAVA动态代理学习
    .Netcore Swagger
    无废话,用.net core mvc 开发一个虽小但五脏俱全的网站
    专为开发者开发的导航网站
    利用webbrowser自动查取地点坐标
    帮你理解学习lambda式
    activeX 打包
    activeX 开发
    提取验证码到winform上webbroswer和axwebbroswer
    存储过程分页的注入问题以及解决
  • 原文地址:https://www.cnblogs.com/luacloud/p/2265737.html
Copyright © 2020-2023  润新知