在记录并在网格中显示时的性能问题?

时间:2016-01-20 08:45:36

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

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

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

目前我所做的首先是从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.
  }

2 个答案:

答案 0 :(得分:1)

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

line:// some Logic将项目添加到此列表中。

建议您要处理每个条目。

假设你真的想要这样做并处理10000 x 110万条目,这里有一些建议:

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

如果输出不合适,你可以用线程处理和合并列表中的数据做更聪明的事情,但这完全取决于你想要做的事情....

如果您需要更多帮助,希望这有助于或者提供更多详细信息

答案 1 :(得分:-1)

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

请更改如下。

barCodeDetails = barCodeDetailMaster.FirestOrDefault(x =&gt; x.VehicleId == Convert.ToInt32(item.VehicleId)&amp;&amp; x.BarCodeId == item.BarCodeId);