0

我正在使用 MVC4 和 C#,并且在循环浏览模型时尝试在视图中构建和排列,由于某种原因,我收到“超时已过期。在操作或服务器完成之前超时时间已过没有回应。” 如果我删除我尝试构建数组 arr1 和 arr2 的部分并将它们发送到名为 ArrTotal 的方法,它工作正常。这似乎很简单,不知道为什么会导致超时。它应该在与以前相同的查询期间构建数组,并且 ArrTotal 方法所做的只是将两个数组中的值相加,不应该发生新的查询导致服务器超时。

@model Tuple<Namespace.Models.Class1[], Namespace.Models.Class2[]>
....
         @{
    int i, x = 0;
    int[] arr1;
    int[] arr2;
    }
    @foreach (var item in Model.Item1)
    {            

        arr1[i] = item.count;
        <tr>
            <td>@item.year</td>
            <td>@item.month</td>
            <td>@item.count</td>
        </tr>
        i++;
    }
....
   @foreach (var item in Model.Item2)
    {                        
        arr2[x] = item.count;
        <tr>
            <td>@item.year</td>
            <td>@item.month</td>
            <td>@item.count</td>
        </tr>
        x++;
    }
....
    @{        
        int[] total = Namespace.Models.GetTotal.ArrTotal(arr1, arr2);        
    }
    @foreach (var t in total)
    {
    <tr>
        <td>@t</td>
    </tr>
    }

编辑 - 更多信息:这是我运行两个查询的控制器:

var start = DateTime.Today.AddMonths(-15);
var query1 = (from t in db.table1
                     where t.ExportTemplate == "template1" && t.LogDate >= start
                     group t by new { Year = t.LogDate.Year, Month = t.LogDate.Month } into tg
                     orderby tg.Key.Year, tg.Key.Month
                     select new Class1
                     {
                         year = tg.Key.Year,
                         month = tg.Key.Month,
                         count = tg.Select(s => s.ObjectGUID).Distinct().Count()
                     }
                    );

        var query2 = (from t in db2.table2
                       where t.UserID == 3 && t.RequestID == 3 && t.ErrorID == 0 && t.LogDate >= start
                       group t by new { Year = t.LogDate.Value.Year, Month = t.LogDate.Value.Month } into tg
                       orderby tg.Key.Year, tg.Key.Month
                       select new Class2
                       {
                           year = tg.Key.Year,
                           month = tg.Key.Month,
                           count = tg.Select(s => s.GID).Distinct().Count()
                       }
                    );
        return View(System.Tuple.Create(query1.ToArray(), query2.ToArray()));

它是超时的返回视图。就像我说的,只要我不尝试从视图构建数组,它就可以工作

4

1 回答 1

1

当您调用 ToArray 时,它会在您的控制器中进行评估。数据库被击中。但是,您是否使用实体框架?然后你仍然被绑定到上下文,也许是延迟加载等等。确保分离对象。

可能是您使用的总方法也可能有问题。

于 2013-05-07T12:25:00.837 回答