我正在使用WPF和.NET Framework 4.6.1,并且遇到性能问题。我现在正在执行大多数繁重的任务,这些任务可能会阻止UI线程异步。 但是我遇到一个问题,就是我要反序列化具有400000个对象的txt文件。 txt文件的大小约为270mb。反序列化的速度非常快,并分配this.Data和反序列化的数据不会冻结线程。但是问题是,当我创建绑定到Gridview的DataCollection时,UI开始冻结,然后可以正常工作。
我试图在下面创建两个实例的空实例,然后将deserializedData拆分为块,同时在this.data中添加/ addrange,但过程非常缓慢,最后,它仍然冻结了UI线程一点点。 Alternive 2可以快速填充集合,但是会冻结UI线程瞬间,直到完成重新绘制网格为止。尽管替代方法1直到添加了所有项目,才会冻结UI线程。
好吧,如果我要用替代方法1进行foreach循环,那么如果要快速循环,您会说要花多少时间?
我该如何解决?
// Alternative 1
this.Data = new ObservableCollection<ContractMetaData>();
this.DataCollection = new QueryableCollectionView(ActiveContractData);
var deserializedData = GetDeserializedData(path);
foreach(var item in DeserializedData)
this.Data.Add(item);
// Alternative 2
this.Data = new ObservableCollection<ContractMetaData>(GetDeserializedData(path););
this.DataCollection = new QueryableCollectionView(ActiveContractData);
答案 0 :(得分:-3)
您必须使用支持数据虚拟化的控件,看看其中的同步融合
https://help.syncfusion.com/wpf/datagrid/data-virtualization