写点什么

一款着眼性能的轻量级 Data Grid——WPF Table View

  • 2012 年 3 月 27 日
  • 本文字数:1309 字

    阅读完需:约 4 分钟

Graham Knight 为 WPF 开发了一款轻量级、高性能的数据网格(Data Grid)。这款被称为 WPF Table View 的数据网格使用微软公开许可协议(Microsoft Public License,简称 Ms-PL)发布在 CodePlex 上。

InfoQ:请问是 WPF 数据网格的什么缺点让你下决心自己开发一款新的数据网格?

我不用 WPF 数据网格的主要原因是由于它的性能问题。我需要能够使用动态定义的列以及列数据模板来查看超过 10 万行的数据,而当我使用 WPF 数据网格做这些工作时,它的用户体验不是很好。我也尝试过使用一些商业网格控件,它们虽然性能好了一些,但是对于我的需求而言最终还是显得过于复杂并且难以了解。

InfoQ:你这款数据网格的设计理念是什么?是打算把它设计成一个大概然后进行扩展,还是说你想为其加入丰富的功能集合以用来覆盖大多数的使用案例?

毫无疑问,这是一个大概的解决方案。我并没有为不同的列类型、编辑模式和主题包添加内置支持,因为这些特性都可以通过非常简单地使用一些数据模板来添加完成,所以我不需要把它们加入到组件中。

我希望创建的是一款网格组件,它易于理解,并且在呈现数据模板化后的数据时能够拥有良好的性能。如果你想要充分利用 Table View,就需要了解一点关于数据绑定和数据模板的知识。不过考虑到这些是 WPF 的基础知识,所以任何使用该控件的用户都应当能够处理这点。

未来我可能会增强一下这个控件的功能集,不过不会以牺牲速度和基本的易用性为代价。

InfoQ:10 万行数据对于用户来说信息量很大。之前你为什么需要一次显示这么多的信息?

我目前在金融业工作,我得要跨越不同的股票组合提供实时的损益报告。随着股票价格的波动,TableView 可以为报告中的每一行显示频繁变化的数据。此外,我还要计算和渲染损益数据的多级聚合(multi-level aggregation),这意味着所有的数据需要加载进内存以保持合理的性能。

InfoQ:那么你觉得哪些特性是它的精华所在?

性能和虚拟化。我主要的需求是为了显示数据而非修改数据,但这并不是说 TableView 不能用作修改数据,其实你只需要自己编写视图模型以及数据模板,就可以使数据可被编辑。

保持 TableView 模型简单意味着底层数据和显示数据之间的层次较少。使用虚拟化是出于性能原因,同样也因为我需要管理的数据量很大。TableView 只能为即将显示的行创建行容器(row container),并在用户滚动表格时回收这些容器,这大大降低了控件使用的内存及资源。

同时这也是一个绝佳的机会学习 ItemsControl 和无样式(lookless)控件如何工作。

InfoQ:你能使用一些像虚拟化堆栈面板(VirtualizingStackPanel)的控件吗,还是说你得重头开始构建自己的版本?

我用到了虚拟化堆栈面板,这块没有理由重新发明轮子。多亏了 Dr WPF 关于 ItemsControl、控件模板和无样式控件模型的精彩系列文章,让我真正了解到了底层发生的工作。

InfoQ:到目前为止,在这个项目上你投入了多少时间?

大概只有一个月,但是展开说要超过 6 个月,因为背后我做了一些事情。而大部分时间我都是花在研究怎样将创建一个网格类型控件的不同方面放到一起,以及尝试学习现有组件,如 Listbox、ListView 和 Data Grid 如何工作。

查看英文原文: WPF Table View, a Lightweight Data Grid Built for Performance

2012 年 3 月 27 日 23:073554
用户头像

发布了 125 篇内容, 共 30.7 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

2021Java面试笔试总结!Flutter中的widget

Geek_f90455

Java 程序员 面试 后端

Java开发实战!不会吧

策划Java工程师

Java 程序员 面试 后端

Java开发经验谈:动手造轮子:实现一个简单的-AOP-框架

策划Java工程师

Java 程序员 面试 后端

从 Docker 中安装启动 Druid

HoneyMoose

2021非科班生的Java面试之路,set集合

JVM调优资料

Java 程序员 面试 后端

GitHub标星8k!你以为在做的是微服务?不

JVM调优资料

Java 程序员 面试 后端

Java开发6年了,你确定你真的理解_双亲委派_了吗?

Java 程序员 面试 后端

Java开发必须掌握!Java虚拟机(JVM

策划Java工程师

Java 程序员 面试 后端

2021Java面试总结!再见笨重的ELK

Geek_f90455

Java 程序员 面试 后端

Java小技巧:Oracle存储过程常用技巧

Java 程序员 面试 后端

Java小程序开发实例!docker容器启动后修改或添加端口

Java 程序员 面试 后端

Java开发入门教程!你技术这么好,总要改变点什么把

Java 程序员 面试 后端

2021年您应该知道的技术之一!MySQL最全整理

Geek_f90455

Java 程序员 面试 后端

Java开发热门前沿知识!Java集合中的基本数据结构

策划Java工程师

Java 程序员 面试 后端

IBM大面积辞退40岁+的员工,Java泛型详解

JVM调优资料

Java 程序员 面试 后端

Java开发视频教程!MySQL8

策划Java工程师

Java 程序员 面试 后端

Java开发面试准备,【备战秋招冲击大厂

策划Java工程师

Java 程序员 面试 后端

Github标星5.3K,YGC问题排查,又让我涨姿势了

JVM调优资料

Java 程序员 面试 后端

Java开发指南!Redis高频面试笔记:基础

策划Java工程师

Java 程序员 面试 后端

Java开发面试问题,Java中高级核心知识全面解析(2)

策划Java工程师

Java 程序员 面试 后端

Docker 集群安装时的服务和进程分配

HoneyMoose

Druid 独立服务器方式部署文档

HoneyMoose

2021程序员进阶宝典!Java程序员:

JVM调优资料

Java 程序员 面试 后端

路边的小店

箭上有毒

8月日更

Java入门你值得拥有!同一个Spring-AOP的坑

JVM调优资料

Java 程序员 面试 后端

Java工作资料!Java开发基础知识学习总结之(上

Java 程序员 面试 后端

Java并发原理解析!我们来捋一捋JAVA的异常

Java 程序员 面试 后端

2021必看!热榜!基于jsp

JVM调优资料

Java 程序员 面试 后端

iOS开发:解决App进入后台,倒计时(定时器)不能正常计时的问题

三掌柜

8月日更 8月

Java入门视频教程!什么是JVM?

Java 程序员 面试 后端

Java基础入门教程!Java垃圾回收机制小结以及优化建议

Java 程序员 面试 后端

一款着眼性能的轻量级Data Grid——WPF Table View-InfoQ