企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
背景: 最近遇到一个DataGrid的性能问题:里面大概有4000个数据, 绑定的ItemSource的类也只有一层数据,即简单的List(里面每个是Protocol Buffer自动产生的一个类,10个字段,没子类或者子列表),这么简单的数据源在一台测试机上全选4000条数据然后一直点击滚动条滚动会导致UI卡死, 整个界面无法工作。 其中: 1.所有的虚拟化相关的都已经设置 2.去掉了自定义的style,使用原生的style, 3.数据源的层次结构也简单,数据量也不大。 出现这个问题让我很意外,用windbg分析过卡死时的dump文件,就是界面卡死,没有异常。自己用blend做了一个模拟数据源,10000条数据都妥妥的。后来有使用了多线程UI,把当前DataGrid放在另外一个单独线程, 还是卡死。数据源的初始化等等都没有关系,因为是显示完成后全选拖动造成。 问题原因: 是google protocol Buffer产生的类有导致性能问题,  解决方法: 重新定义类来包装protocol buffer的结构体。