添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
想旅行的熊猫  ·  Spark ...·  6 月前    · 
耍酷的骆驼  ·  ImageView监听选中事件 ...·  1 年前    · 
玩滑板的小虾米  ·  Django 使用 Markdown ...·  1 年前    · 

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

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

SolidColorBrush myBrush = new SolidColorBrush(Colors.Yellow);   
//如果可以冻结 
if (myBrush.CanFreeze)  
    //冻结对象,使之成为只读,提高性能      
    myBrush.Freeze(); 
FreezableBtn.Background = myBrush;   
    //判断对象是否冻结 
if (myBrush.IsFrozen)  
//如果是只读对象,则Clone对象     
    SolidColorBrush CloneBrush = myBrush.Clone();
    //做更改     
    CloneBrush.Color = Colors.Red;      
    FreezableBtn.Background = CloneBrush;  
{  //如果对象未被冻结,则可直接修改对象     
    myBrush.Color = Colors.Red;  

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

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

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

转载自:https://www.cnblogs.com/surpasslight/archive/2012/02/10/2345540.html

WPF虽然很美观,效果很炫,但是对资源的消耗也很大,尤其是初次接触WPF的人,因为很多地方虽然实现了想要的效果,但是由于经验问题,所以也会造成很大的资源浪费,好的程序,需要更好的优化。虽然可能只是节省了很少的一点资源,但是对整体程序运行的速度与稳定性来说,也许就起到了决定性的作用;每个地方都能做到一点优化,那么在成个程序中,优化的效果就会很明显,流畅、稳定,才是一个程序的健康状态。在MSDN上
在利用DrawingVisual尽心绘图时,如果对Pen对象调用Freeze()方法,冻结对象的修改,则可以大幅度提升绘图性能(经过实测,对2800个线段绘制,性能提升20~50倍左右)。Freeze()方法继承自Freezable对象,调用该方法后,该对象将不可以修改。 Freeze() 使当前对象不可修改,并且将其 IsFrozen 属性设置为 true。 (Inher...
众所周知的,WPF 中多数对象都继承自 DispatcherObject,而 DispatcherObject 带给这些对象一个特点:不能跨线程访问。 不过,WPF 中依然存在一些例外。本文将介绍 WPF 那些可跨线程访问的 DispatcherObject,如何充分利用这个特点提高应用程序的性能,以及如何自己编写这样的 DispatcherObject。 本文内容什么样的 Dispatcher...
什么是可冻结对象Freezable 是一种特殊类型的对象,具有两种状态:unfrozen 和 frozen。 解冻时,Freezable 的行为与任何其他对象一样。 冻结后,无法再修改 FreezableFreezable 提供了一个 changed 事件来通知观察者对对象的任何修改。 冻结 Freezable 可以提高其性能,因为它不再需要在更改通知上花费资源。 冻结Freezable 也可以跨线程共享,而未冻结Freezable 则不能。 尽管 Freezable 类有许多应用程序,但
WPF控件是由纯粹的.net代码构成,以前的用户界面技术Windows窗体控件(封装了来自Win32API的核心要素,是不可改变的),因此WPF能提供样式和模版机制来允许用户进行修改。 1.理解逻辑树和可视化树 可视化树是逻辑树的扩展版本。如图,按钮也是由可视化元素组成,这些元素都是由FrameworkElement的派生类组成的
  在正文开始之前需要介绍一个人:Sean Sexton.来自明尼苏达双城的软件工程师。最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C#和2,000 Things You Should Know AboutWPF。他以类似微博式的150字简短语言来每天更新一条WPF和C#重要又容易被遗忘的知识。很希望能够分享给大家。   本系列我...
WPF是一种用于开发Windows应用程序的框架,其中一个功能强大的控件是CircularGauge(圆形仪表盘)。CircularGauge是一个可视化控件,常用于展示、监控和测量各种数据。 CircularGauge提供了一个圆形的仪表盘,通常具有刻度线、指针和标签等组件。它的主要用途是以直观的方式显示数据的状态或进度。比如,可以将其用于展示车速表、温度计或者其他数据的监控工具等。 使用CircularGauge控件需要通过定义最小值、最大值和当前值来设置其表现。通过调整这些值,我们可以在仪表盘上动态地显示不同的数据值。CircularGauge还支持自定义刻度线和指针的外观,使其更符合应用的主题和需求。 CircularGauge还支持交互事件,例如可以响应用户的点击或滑动操作。这意味着我们可以根据用户的输入更改值,并在仪表盘上实时更新显示。 使用WPF框架的好处是,我们可以通过XAML语言来定义CircularGauge的外观和行为。这使得开发人员可以更方便地设计和调整仪表盘的样式。而且,WPF支持数据绑定,因此我们可以轻松地将仪表盘连接到数据源,以实时地显示数据的变化。 总之,WPF CircularGauge是一种功能强大的控件,可用于在Windows应用程序中实现漂亮、直观的仪表盘来显示、监控和测量各种数据。它提供了丰富的自定义选项,以满足应用的需求,并支持与用户的交互操作。通过WPF框架的使用,我们可以更轻松地创建和调整仪表盘的样式和行为。