公司有个项目,界面很卡,同事怀疑是DataTable刷新引起的,我写了一个小Demo测试一下这块的性能。
测试的结果
DataTalbe的绑定非常的耗时
我的前台代码:
<DataGrid
Grid.Row="1"
AutoGenerateColumns="True"
BorderBrush="LightGray"
ItemsSource="{Binding Items}"
MaxColumnWidth="350"
ScrollViewer.CanContentScroll="False"
SelectedItem="{Binding SelectedItem}"
Style="{StaticResource DataGridStyle1}">
</DataGrid>
后台对应的属性:
private DataTable _table;
public DataView? Items { get; set; }
public object SelectedItem { get; set; }
赋值操作:
private void OnBindingTable()
{
Items = _table.DefaultView;
}
_table是200行,50列,执行OnBindingTable界面会卡好几秒。
DispatcherTimer定时器在毫秒的精度上是不可靠的。
为了模拟参数实时刷新,我开始用DispatcherTimer定时器来刷新,一开始用10ms的间隔,发现帧数达不到每秒100帧,大概40帧左右。后来改成100ms的间隔,也只有每秒5帧左右。改成1000ms,基本上还算是准的。
定时器的执行函数:
private void _timer_Tick(object? sender, EventArgs e)
{
Index++;
Time = _sw.ElapsedMilliseconds;
if (Time > 0)
{
FrameCount = Index * 1000.0 / Time;
}
#if true
var idList = Enumerable.Range(0, RowCount * ColumnCount).ToList();
Random random = new Random();
for (int i = 0; i < ParamCount; i++)
{
var id = random.Next(idList.Count);
var index = idList[id];
var rowId = index / ColumnCount;
var colId = index % ColumnCount;
var row = _table.Rows[rowId];
row[colId] = random.Next(1000).ToString();
idList.RemoveAt(id);
}
#endif
}
整体界面基本上不卡。
标签:index,idList,random,DataGrid,var,table,WPF,DataTable From: https://www.cnblogs.com/wzwyc/p/17958356