Wpf 如何使用MVVM更快地将大量行绑定到DataGrid
我有一个MVVM应用程序,其中我必须从视图模型将大量记录绑定到DataGrid 实际上,我会从用户那里获得用户信息、要购买的物品数量和序列号。如果用户输入的数量为1000,序列号为1234,我需要创建1000条记录,序列号从1234开始,并且对于每条记录,它将增加1。当创建序列号时,我需要检查它是否已经存在于数据库中 我的代码:Wpf 如何使用MVVM更快地将大量行绑定到DataGrid,wpf,entity-framework,mvvm,datagrid,Wpf,Entity Framework,Mvvm,Datagrid,我有一个MVVM应用程序,其中我必须从视图模型将大量记录绑定到DataGrid 实际上,我会从用户那里获得用户信息、要购买的物品数量和序列号。如果用户输入的数量为1000,序列号为1234,我需要创建1000条记录,序列号从1234开始,并且对于每条记录,它将增加1。当创建序列号时,我需要检查它是否已经存在于数据库中 我的代码: for(var i=0;i<Quantity;i++) { try {
for(var i=0;i<Quantity;i++)
{
try
{
acquisition.ContactName = Contact;
acquisition.Date = AcquisitionDate;
acquisition.UserNotes = UserNotes;
if (IsMultipleChecked)
{
acquisition.SerialNumber = SerialPrefix + acquisition.SerialNumber + SerialSuffix;
}
if (IsSerialInLogs(acquisition.SerialNumber) || IsSerialNumberUsed(acquisition.SerialNumber))
{
errors.AppendLine(acquisition.SerialNumber + " has already been used.");
continue;
}
if (!IsItemSelected)
{
Acquisitions.Add(acquisition);
}
}
catch (Exception ex)
{
errors.AppendLine(ex.Message + Environment.NewLine);
}
}
var acquisitionRepository = _repositoryFactory.Get<Acquisition>();
Acquisitions.Where(a => a.AcquisitionId == default(long)).ToList().ForEach(acquisitionRepository.Add);
acquisitionRepository.Commit();
AcquisitionCollectionView.Refresh();
for(var i=0;ia.AcquisitionId==default(long)).ToList().ForEach(acquisitionRepository.Add);
acquisitionRepository.Commit();
AcquisitionCollectionView.Refresh();
此处,IsSerialInLogs和IsSerialNumber used是用于检查序列号是否已存在于两个不同表中的方法
Acquisitions是一个列表,其中将插入1000条记录,并且列表中的记录将添加到另一个表中
最后,我的datagrid AcquisitionCollectionView将被刷新以绑定数据
所有这些过程都需要2分钟以上。就如何更快地完成这项工作提供任何建议,或者提供任何可能有助于克服此问题的示例代码或链接。。
这是使用MVVM来完成的
IsSerialInLogs()
和IsSerialNumberUsed()
如何在内部工作?您可以使用No.MVVM检查您的性能下降情况。任何MVVM都可以帮助您插入1000条记录并加快速度。但您可以将UI绑定到ViewModel属性并异步更新此属性。这和你想要的一样吗?对于1条记录,只需要不到一秒钟的时间。我认为你需要做一些基准测试,找出流程中哪一部分花费的时间最长,并开始尝试改进。从这有限的样品我们很难分辨。也: