2011-11-15 65 views
2

当Datagrid上的.ItemsSource设置为集合时,我总是遇到主要的性能问题。该方法返回的速度很快,但在屏幕实际呈现任何内容之前存在非常明显的延迟。由于Datagrid设置了虚拟化模式,因此它应该能够轻松处理非常大的集合。我在项目集合的绑定属性中打印出一些调试信息,以确保它不会加载整个集合,但它只访问前几个项目,所以我确信虚拟化正在工作。即使对于小型集合,延迟也是大致相同的,所以它与实际的数据加载似乎无关。GridView vs DataGrid性能

所以它纯粹是导致放缓的渲染。大多数情况下,这是由于在ScrollViewer中包含Datagrid,或者自动生成行高等引起的。但是我通过给出所有固定宽度来确定所有可能的原因,并确保没有设置为“无限”或“自动”。

把我的头发拉出来几个星期后,我试了一件简单的事情:我换了一个GridView的Datagrid。令我惊讶的是它不会受到大的延迟,它会立即着色。两者具有完全相同的属性和样式,所以我试图理解为什么Datagrid太慢了。

是否有任何逻辑的原因,为什么DataGrid可能比GridView慢?

回答

0

比较属性,事件和方法的数量。 DataGrid有一个编辑模板。 DataGrid只是一个更重的权重控件,GridView是为了速度而构建的。

0

DataGrid总是会很慢,但通过使用EnableRow/ColumnVirtualization属性为true(不知道您是否已经这样做)并将固定列宽设置为true可以获得(相当)显着的性能提升导致要执行的布局的重新计算更少。

建议取自here