每当在 Linq to SQL 中执行存储过程调用需要超过 4 分钟的时间时,我都会尝试抛出 TimeoutException。
这是我的控制器中的代码:
public IEnumerable<Quality> Get(DateTime param1, DateTime param2, string param3)
{
var dc = new VideoDataContext(WebApplication.MonitorServer);
dc.CommandTimeout = 240;
List<Quality> cqs = dc.Vid_GetQualityForVideo(param1, param2,
param3).ToList();
return cqs;
}
出于某种原因,代码执行的时间(长于)超过 4 分钟,但不会引发超时异常。最后,对于非常大的查询,我得到了一个内存异常。
我无法优化查询,甚至无法查看它,因为我无权访问存储过程。我只能在应用程序中检测到超时。有谁知道为什么我没有收到 TimeoutException。
在我的代码中的其他地方,我有非常相似的代码,并且在 4 分钟后在另一台拥有不同数据库的服务器上引发超时。它只是没有在这里发生。
我可以写信给数据团队以更改他们的某些内容,但我想具体说明问题所在。
谢谢!
编辑:澄清我之前在检索数据时看到的,这将需要很长时间,并注意到这是大量数据传递给客户端。我有一个 MVC 动作过滤器,它检测行数,如果它超过某个阈值(现在为 10000),它只会将错误消息传递给客户端,而不是整个数据集。我正在运行的查询返回的方式超过了阈值,但仍然需要超过 4 分钟才能完成。