在网格中显示记录和显示时出现性能问题
本文关键字:显示 性能 问题 网格 记录 | 更新日期: 2023-09-27 18:31:16
我正在从两个表中获取记录 一个是车辆详细信息,另一个是条形码详细信息。
车辆详细信息包含 10,000 条记录,条形码详细信息包含 110 万条记录,每辆车映射到特定的条形码。
目前我正在做的是首先从BarcodeDetailsTable获取所有条形码详细信息,并且需要8秒才能完成它,
List<VTSBarCodeDetail> barCodeDetailMaster = barCodeDetailRepository.Get(null, null) as List<VTSBarCodeDetail>;
然后我会得到车辆详细信息
List<VTSVehicleRegistrationObject> vehicleRegObject = (Some Simple query to get the VehicleRegobject)
然后我在这个 for 循环中运行一个 for 循环,我将条形码没有密码类型等详细信息添加到列表中。 对于 1K 记录,此 for 循环需要 1 分钟的时间才能完成。这是我的代码和日志文件看看这个。
foreach (VTSVehicleRegistrationObject item in vehicleRegObject)
{
barCodeDetails = barCodeDetailMaster.Where(x => x.VehicleId == Convert.ToInt32(item.VehicleId) && x.BarCodeId == item.BarCodeId).FirstOrDefault();
{
//some Logic add item to this list.
}
首先,你为什么要这样做?更多的上下文会有所帮助。如果您真的想为每个 VehicleDetail 条目提供条形码详细信息,那么是的,嵌套循环需要时间,我的意思是很长时间。
行://some Logic 将项目添加到此列表中。
建议您要处理每个条目。
假设您确实要执行此操作并处理 10000 x 110 万个条目,这里有一些建议:
- 拆分车辆详细信息批量
- 获取合理的数字(如 10 或 50),并从车辆详细信息加载相应的记录... 使用线程
- 来处理记录(请注意,过度使用线程会扼杀好处)
如果输出不应该按顺序排列,您可能可以使用线程做更聪明的事情来处理和合并列表中的数据,但这完全取决于您要做什么......
希望这有所帮助,或者如果您需要更多帮助,请大声喊出更多详细信息
barCodeDetails = barCodeDetailMaster.Where(x => x.VehicleId == Convert.ToInt32(item.VehicleId) && x.BarCodeId == item.条形码 ID)。FirstOrDefault();
请更改如下。
barCodeDetails = barCodeDetailMaster.FirestOrDefault(x => x.VehicleId == Convert.ToInt32(item.VehicleId) && x.BarCodeId == item.条形码标识);