在有的项目中,有这样的需求,由于显示器的显示区域是有限的,而软件却要展示一个远大于显示区域的一些元素,此时就要引入放大、缩小、拖动等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. 前端学习资源(CSS+HTML5)

    CSS CSS | MDN CSS参考手册 CSS探索之旅 Web前端实验室 STYLESHEETS CSS3中的content字符编码 Font Awesome, 一套绝佳的图标字体库和CSS框架 ...

  2. ubuntu默认root密码

    安装完Kubuntu后一直都是用我的用户名bbking登录, 一直没想到root的问题, 以为每次sudo输入的密码就是我的root密码. 刚才为了修改文件夹的所有者,想使用su root切换到roo ...

  3. AC自动机 专题

    // 求目标串中出现了几个模式串 //==================== #include <stdio.h> #include <algorithm> #include ...

  4. Java-->多线程断点续传

    --> 在多线程复制的基础上加入断点续传的功能 -->Test 测试类 package com.dragon.java.multithreaddownload; import java.i ...

  5. Java-->用递归方法复制目录、子目录以及文件(文件用到IO流)

    package com.dragon.java.newcopyfile; import java.io.File; import java.io.FileInputStream; import jav ...

  6. Dialog样式

    <style name="load_dialog" parent="@android:style/Theme.Dialog"> <item n ...

  7. 第二章 C语言编程实践

    上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...

  8. linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)

    原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是 ...

  9. jQuery - 设置内容和属性

    设置内容 - text().html() 以及 val() 我们将使用前一章中的三个相同的方法来设置内容: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容( ...

  10. Linux-配置虚拟IP实例

    在日常linux管理工作中,需要为应用配置单独的IP地址,以达到主机与应用的分离,在应用切换与迁移过程中可以做到动态切换,特别是在使用HA的时候,这种方案可以保证主机与应用的隔离,对日常的运维有很大的 ...