在有的项目中,有这样的需求,由于显示器的显示区域是有限的,而软件却要展示一个远大于显示区域的一些元素,此时就要引入放大、缩小、拖动等UI控制技术,而在使用这些技术的同时,在后台有效的控制渲染元素的个数显得尤其重要。

假设这样的案例屏幕1366*768,软件全屏显示为1366×738,软件中显示地图用的区域为600×600,此时我们可以把这个600×600的区域定义为关注区域,后台程序在获取屏幕界面变更事件(如最大化、最小化、侧栏收缩\展开)后,重新计算这个600×600的四个顶点坐标值。当需渲染元素在这个区域内时再进行渲染,否则不处理。如下图所示,黑色区域为关注区域。

以下是后台判断的代码

 private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Random RD = new Random();
            Console.WriteLine(DateTime.Now.ToString("mm:ss.fff"));
            ; i < ; i++)
            {
                TextBlock tb = new TextBlock();
                tb.Text = i.ToString();
                Brush myBrush = new SolidColorBrush(Colors.White);
                tb.Foreground = myBrush;
                , );
                , );
                Canvas.SetLeft(tb, x);
                Canvas.SetTop(tb, y);

                 && x <  && y >  && y < )
                {
                    CanvInVStack.Children.Add(tb);
                }

            }
            Console.WriteLine(DateTime.Now.ToString("mm:ss.fff"));
        }

经过测试,10万级别的元素显示,如果不加 if (x > 0 && x < 600 && y > 0 && y < 600)这句判断,所耗时间约为22秒,如果加了判断耗时为2秒。时间计算的方法是,按钮一点击之后会产生一个时间,当看到元素显示到界面后,点击按钮2产生一个时间,因为没有找到合适的渲染成功事件,只能采用手工计时,虽不是很精确但是足以证明两种方案的效率相差10倍左右。上面的程序是生产100万个元素,如果是10万个不加判断程序还可以勉强运行,如果提高到100万的数量级再不加判断,程序会因为内存不足而卡死。

在设计类似的软件时,一定要采用分而治之的方案,才能得到良好的性能。

WPF性能改善---之化整为零(蜂窝的衍生应用)的更多相关文章

  1. WPF性能优化经验总结

    WPF性能优化一.Rendering Tier 1. 根据硬件配置的不同,WPF采用不同的Rendering Tier做渲染.下列情况请特别注意,因为在这些情况下,即使是处于Rendering Tie ...

  2. WPF性能调试系列 – 内存监测

    WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler     WPF内存优化:Ants M ...

  3. WPF性能调试系列 – Ants Performance Profiler

    WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler WPF内存优化:Ants Memor ...

  4. WPF性能调试系列 – 应用程序时间线

    WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler WPF内存优化:Ants Memor ...

  5. 性能改善之For与Foreach

    关于For与Foreach的区别,博客园里已经有好多这样文章了,都分析的挺好:http://www.cnblogs.com/jobs/archive/2004/07/17/25218.aspx  不过 ...

  6. WPF性能提高--MSDN学习摘要

    关于性能 一.    关于硬件加速 1.对于大多数图形硬件而言,大型图面是指达到 2048x2048 或 4096x4096 像素大小的图面. 二.    合理的布局 1.简单地说,布局是一个递归系统 ...

  7. JFace TableViewer性能改善 -- 使用VirtualTable

    前一篇提到了SWT中的table的通过使用virtual table性能得到很大的改善,那么如果既存的工程中使用的是TableViewer来创建的表,也能改成virtual table吗? 答案是肯定 ...

  8. EF的性能改善和思考

    EF是个工具,用的好了性能就会很好,用的不好性能就会有很大损失. 先从EF的设计思想来讲解 EF的初衷是根据缓存中的实体对象,以及实体对象的状态(删除.更新.添加)来对数据库进行操作,这些实体对象.以 ...

  9. SWT table性能改善 -- 使用VirtualTable

    在SWT程序中使用table展示数据时,如果数据过多,执行起来会比较慢,不过,我们可以借助VirtualTable来解决这一问题. Eclipse官网中关于VirtualTable的说明见:http: ...

随机推荐

  1. 我的Java后端书架2016年暮春3.0版(转)

    书架主要针对Java后端开发. 3.0版把一些后来买的.看的书添补进来,又或删掉或降级一些后来没有再翻开过的书. 更偏爱那些能用简短流畅的话,把少壮不努力的程序员所需的基础补回来的薄书,而有些教课书可 ...

  2. dedecms 列表每隔6行输出一个空li

    {dede:list pagesize='33'} <li class="hang"><a href="[field:arcurl/]" ta ...

  3. hdu 5187 zhx's contest

    题目分析如果n=1,答案是1,否则答案是2n−2. 证明:ai肯定是最小的或者最大的.考虑另外的数,如果它们的位置定了的话,那么整个序列是唯一的. 那么ai是最小或者最大分别有2n−1种情况,而整个序 ...

  4. CMOS、BIOS

    CMOS主要的功能为记录主板上面的主要参数,包括系统时间.CPU电压与频率.各项设备的I/O地址与IRQ等,由于这些数据的记录要花费电力,因此主板上面才有电池. BIOS为写入到主板上某一块闪存或EE ...

  5. leetcode 102 Binary Tree Level Order Traversal ----- java

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  6. URAL(timus) 1272 Non-Yekaterinburg Subway(最小生成树)

    Non-Yekaterinburg Subway Time limit: 1.0 secondMemory limit: 64 MB A little town started to construc ...

  7. Java泛型和链表

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...

  8. POJ-3162 Walking Race (求树上两点之间最大距离)

    题目大意:给一棵树,对于所有的点,找出距它最远点的距离,然后将这些距离排成一列,找出最长的一个区间满足:其中的最大值减去最小值不大于m. 题目分析:两次dfs找出距每个节点的最远距离,然后可以通过维护 ...

  9. ExtJS ComboBox的用法+代码

    Ext.onReady(function() { var store = Ext.create('Ext.data.Store', { autoLoad : true, fields : ['valu ...

  10. read the python code and predict the results --- from <Learn Python The Hard Way>

    import random from urllib import urlopen import sys WORD_URL = "http://learncodethehardway.org/ ...