在网格中显示记录和显示时出现性能问题

本文关键字:显示 性能 问题 网格 记录 | 更新日期: 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.条形码标识);