我正在使用WPF Toolkit数据网格,此刻滚动速度非常慢.网格有84列和805行.(包括3个固定列和标题是固定的.)水平和垂直滚动非常慢.虚拟化已打开,我已在xaml中明确启用了列虚拟化和行虚拟化.有什么需要注意的,这可以真正影响性能,例如绑定方法,或每个celltemplate中的xaml是什么?
需要注意的一点是,我在创建datagrid时动态添加列.这会影响到什么吗?(我还同时动态创建celltemplate,以便我的绑定设置正确.)
以下是生成的大多数单元格的模板代码.基本上我需要动态添加的列(大多数是这些),我遍历我的列表并使用AddColumn方法添加列,另外我动态构建模板,以便绑定语句正确索引集合中的正确项目该专栏.模板不是太复杂,只有两个TextBlocks,但我确实在每个上绑定了四个不同的属性.通过更改绑定到OneWay,我似乎能够挤出更多性能:
private void AddColumn(string s, int index)
{
DataGridTemplateColumn column = new DataGridTemplateColumn();
column.Header = s;
//Set template for inner cell's two rectangles
column.CellTemplate = CreateFactViewModelTemplate(index);
//Set Style for header, ie rotate 90 degrees
column.HeaderStyle = (Style)dgMatrix.Resources["HeaderRotateStyle"];
column.Width = DataGridLength.Auto;
dgMatrix.Columns.Add(column);
}
//this method builds the template for each column in order to properly bind the rectangles to their color
private static DataTemplate CreateFactViewModelTemplate(int index)
{
string xamlTemplateFormat =
@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition …
Run Code Online (Sandbox Code Playgroud) 正如大多数WPF开发人员所知,设置ScrollViewer.CanContentScroll
为false
禁用虚拟化; 但我想知道它是如何工作的,因为我尝试启用虚拟化,同时设置ScrollViewer.CanContentScroll
到false
.
我在SSMS(SQL Server Management Studio 2016)中注意到,查询结果在一秒钟内返回(超过10k +行).结果表/网格滚动非常流畅,并且在SSMS上具有极低的内存占用(~80MB).这种类似网格/视图的控制方式可以执行ListView(~200MB,2-3秒)和DataGrid(~600MB,8-10秒).即使我关闭所有可视化或调整cancententscroll或修改其高度以优化速度,它们仍然在SSMS中远远落后于网格,仍然使用缓慢的滚动和GUI操作.
SSMS中使用的网格控制背后的原因是什么?