【问题标题】:Performance Issue While Fecthing the Record and Displaying in Grid?获取记录并在网格中显示时出现性能问题?
【发布时间】:2016-04-26 00:24:04
【问题描述】:

我正在从两个表中获取记录,一个是 VehicleDetails,另一个是 Barcodedetails。

车辆详细信息包含 10,000 条记录,条形码详细信息包含 110 万条记录,并且每辆车都映射到特定的条形码。

目前我正在做的首先是从 BarcodeDetailsTable 获取所有 BarcodeDetails,完成它需要 8 秒,

List<VTSBarCodeDetail> barCodeDetailMaster = barCodeDetailRepository.Get(null, null) as List<VTSBarCodeDetail>;

然后我会得到车辆详细信息

List<VTSVehicleRegistrationObject> vehicleRegObject = (Some  Simple query to get the VehicleRegobject)

然后我在这个for循环中运行一个for循环,我将barcodeno passtype等详细信息添加到列表中。这个 for 循环需要 1 分钟的时间来完成 6k 条记录。 这是我的代码和日志文件,看看这个。

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.
  }

【问题讨论】:

  • 不要从包含 11Lakhs 记录的条码详细信息中获取所有记录。编写一个 LINQ/SQL 语句来选择所需的列并在这两个表上应用 JOIN。
  • 我认为,如果您使用存储过程在 sql 级别预处理所有这些计算,这将很重要。

标签: c# asp.net .net asp.net-mvc asp.net-mvc-3


【解决方案1】:

barCodeDetails = barCodeDetailMaster.Where(x => x.VehicleId == Convert.ToInt32(item.VehicleId) && x.BarCodeId == item.BarCodeId).FirstOrDefault();

请如下更改。

barCodeDetails = barCodeDetailMaster.FireOrDefault(x => x.VehicleId == Convert.ToInt32(item.VehicleId) && x.BarCodeId == item.BarCodeId);

【讨论】:

    【解决方案2】:

    首先,您为什么要这样做?更多的上下文会有所帮助。如果您真的想为每个 VehicleDetail 条目添加 BarCodeDetails,那么是的,嵌套循环将需要时间,我的意思是很长时间。

    行://一些逻辑将项目添加到此列表。

    建议您要处理每个条目。

    假设您真的想这样做并处理 10000 x 110 万个条目,以下是一些建议:

    • 拆分 VehicleDetails 以批量获取合理数量(如 10 或 50)并从 VehicleDetails 加载相应记录...
    • 使用线程处理记录(注意过度使用线程会扼杀好处)

    如果输出不应该是有序的,你可能可以用线程做更聪明的事情来处理和合并列表中的数据,但这一切都取决于你想要做什么......

    希望这对您有所帮助,如果您需要更多帮助,请提供更多详细信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 2020-06-10
      相关资源
      最近更新 更多