【问题标题】:In my MVC app, why is the performance so slow after adding this code?在我的 MVC 应用程序中,为什么添加此代码后性能如此缓慢?
【发布时间】:2019-01-29 17:57:00
【问题描述】:

有没有什么方法可以产生同样的想法,即在这些值上将日期倒退一天而不会对搜索时间造成巨大影响? 如果没有这个代码块,它会在一秒钟内加载一个新页面。添加后,页面加载之间的时间为 6-7 秒。

//incidents is an IQueryable

//Set date backwards one day if incident is entered during third shift after midnight
        for (var x = 0; x < incidents.Count(); x++){
            DateTime createdDate = incidents.ToList().ElementAt(x).DateCreated;
            TimeSpan createdTime = createdDate.TimeOfDay;
            if (createdTime > startTime && createdTime < endTime){
                incidents.Skip(x).First().DateCreated = new DateTime(2019,01,01);
            }
        }

【问题讨论】:

    标签: c# asp.net-mvc performance linq


    【解决方案1】:

    由于incidentsIQueryable,您正在执行数据库调用2x+1。一次用于Count,一次用于ToList,一次用于Skip(x).First每个事件

    您可以尝试在循环之前调用ToList()并处理水合列表以查看性能是否有所提高。

    【讨论】:

      【解决方案2】:

      这可能与许多.ToList().Skip().Count() 通话有关。 请尝试以下方法:

      foreach (var incident in incidents.ToList())
      {
          var createdDate = incident.DateCreated;
          var createdTime = createdDate.TimeOfDay;
          var index = incidents.IndexOf(indcident);
          if (createdTime > startTime && createdTime < endTime){
              incidents.Skip(index).First().DateCreated = new DateTime(2019,01,01);
          }
      }
      

      而且,我对.Skip() 不是很熟悉,但你能不能把代码简化成这样?

      foreach (var incident in incidents.ToList())
      {
          var createdDate = incident.DateCreated;
          var createdTime = createdDate.TimeOfDay;
          if (createdTime > startTime && createdTime < endTime){
              incident.DateCreated = new DateTime(2019, 01, 01);
          }
      }
      

      【讨论】:

      • 我使用 .skip().first() 是因为我在使用 LINQ 时遇到了错误,并且在我看过的一篇文章中建议使用它而不是我以前使用的.我认为这是一种奇怪的语法,但它对我有用。
      • @sjohn285 据我了解,.Skip(x) 将获取您的数组/列表/可枚举,并将 x 元素跳过到数组中。然后您调用.First() 获取该数组中的元素,然后更新该元素上的.DateCreated 字段。您应该能够使用我建议的第二个代码实现相同的效果(以及提高可读性/可维护性)。
      猜你喜欢
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多