我正在使用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()));
它的返回视图超时。 就像我说的那样,只要我不尝试从视图构建数组
就行答案 0 :(得分:1)
当您调用ToArray时,它会在您的控制器中进行评估。数据库在那里被击中。但是你使用的是实体框架吗?然后你仍然绑定上下文,也许懒惰加载和所有这些。确保分离对象。
您使用的总方法可能也有问题。