将Datagrid上的.ItemsSource设置为集合时,我总是遇到严重的性能问题。该方法返回速度很快,但在实际渲染到屏幕之前有一个非常明显的延迟。由于Datagrid设置了虚拟化模式,因此它应该能够轻松处理非常大的集合。我在项目集合的绑定属性中打印出一些调试信息,以确保它没有加载整个集合,但它只访问了前几个项目,因此我确信虚拟化正在运行。即使对于小型集合,延迟也大致相同,因此它似乎与实际数据加载无关。
所以这纯粹是导致放缓的渲染。大多数情况下,这是由于在ScrollViewer中使用Datagrid,或者具有自动行高生成等等。但是我通过给出所有固定宽度来确定所有这些可能的原因,并确保没有任何设置为'无限'或'自动'。
拔出头发几周之后,我尝试了一些简单的事情:我将Datagrid切换为GridView。令我惊讶的是,它并没有受到大的延迟的影响,它会瞬间完成。两者都具有完全相同的属性和样式,所以我试图理解为什么Datagrid这么慢。
DataGrid可能比GridView慢吗?
答案 0 :(得分:0)
比较属性,事件和方法的数量。 DataGrid有一个编辑模板。 DataGrid只是一个更重的重量控制,GridView是为了速度而构建的。
答案 1 :(得分:0)
DataGrid
总是很慢,但是你可以通过将EnableRow/ColumnVirtualization
属性设置为true来获得(相当)显着的性能提升(不确定你是否已经这样做了)设置固定的列宽,因为它会减少要执行的布局的重新计算。
从here
提出的建议答案 2 :(得分:0)
感谢Yoy,网格视图是我寻找的最佳视图。 我的数据网格有很多问题。 数据网格中存在非常高的内存泄漏。当您多次更新datagrid时,UI线程变得越来越慢,直到软件崩溃。 但gridview的性能非常高 。 谢谢