WPF中ItemsControl绑定到Google ProtocolBuffer的结构体时的性能问题
背景:
最近遇到一个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的结构体。
https://muzizongheng.blog.csdn.net/