大表格性能
大表格性能的核心是:数据模型可以很大,但布局、绘制、命中测试和编辑器同步必须限制在可视区域附近。
关键策略
- 行虚拟化。
- 列宽缓存。
- 分组缓存。
- 当前单元格和选区状态独立管理。
- 复制选区时按需读取数据,不在绘制阶段展开。
- 单元格 popup 编辑器按需创建。
滚动
GridView 应自己管理滚动条和可视范围。不要把 GridView 放进同方向的 RenderScrollViewer 中,否则滚轮事件、可视窗口和焦点同步都会变复杂。
列宽
自动列宽不能全量扫描所有行。推荐:
- 限制采样行数。
- 优先使用列定义宽度。
- 对用户调整后的列宽持久化。
- 大文本列使用 ellipsis 和 tooltip。
分组
分组数据要有缓存。展开/折叠时只重建可见行索引,不要复制所有原始行对象。
编辑
单元格编辑器只在当前编辑单元格存在。关闭编辑器时释放 popup、输入状态和临时上下文。
诊断指标
大表格建议暴露 debugState:
- row count。
- visible range。
- painted row count。
- scroll offset。
- current cell。
- selected ranges。
- cache rebuild duration。
这些指标比单纯看 FPS 更容易定位问题。