未将TimeoutException抛出Linq到SQL DataContext.CommandTimeout C#

未将TimeoutException抛出Linq到SQL DataContext.CommandTimeout C#,c#,.net,sql-server-2008,linq-to-sql,C#,.net,Sql Server 2008,Linq To Sql,每当在Linq到SQL中执行存储过程调用所需时间超过4分钟时,我尝试抛出TimeoutException 以下是我的控制器中的代码: public IEnumerable<Quality> Get(DateTime param1, DateTime param2, string param3) { var dc = new VideoDataContext(WebApplication.MonitorServer);

每当在Linq到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;
        }
public IEnumerable Get(日期时间参数1、日期时间参数2、字符串参数3)
{     
var dc=新的VideoDataContext(WebApplication.MonitorServer);
dc.CommandTimeout=240;
列表cqs=dc.Vid_GetQualityForVideo(参数1,参数2,
参数3)ToList();
返回cqs;
}
出于某种原因,代码执行的时间超过4分钟,但不会引发超时异常。最后,对于非常大的查询,我得到了一个内存异常

我无法优化查询,甚至无法查看它,因为我没有访问存储过程的权限。我只能在应用程序中检测到超时。有人知道我为什么没有时间例外吗

在我的代码中的其他地方,我有非常相似的代码,超时是在4分钟后在另一台持有不同数据库的服务器上抛出的。只是这里没有发生

我可以写信给数据团队来改变他们的工作,但我想具体说明问题所在

谢谢


编辑:为了澄清我以前在检索数据时看到的情况,这需要花费很长时间,并注意到传递给客户机的是大量数据。我有一个MVC操作过滤器,它可以检测行数,如果行数超过某个阈值(目前为10000),它只会将错误消息传递给客户端,而不是整个数据集。我正在运行的查询返回的值远远超过阈值,但仍需要超过4分钟才能完成。

如果您的查询很大,则
.ToList()
可能会导致性能问题。从查询中获得的
IEnumerable
将被延迟计算。但是,调用
.ToList()
将遍历结果的全部内容,将其放入结果的
列表中(
cqs

如果您确实希望函数的返回是
IEnumerable
,那么您可以只返回查询
IEnumerable

public IEnumerable<Quality> Get(DateTime param1, DateTime param2, string param3)
    {     

        var dc = new VideoDataContext(WebApplication.MonitorServer);

        dc.CommandTimeout = 240;

        return dc.Vid_GetQualityForVideo(param1, param2, param3);
    }
public IEnumerable Get(日期时间参数1、日期时间参数2、字符串参数3)
{     
var dc=新的VideoDataContext(WebApplication.MonitorServer);
dc.CommandTimeout=240;
返回dc.Vid_GetQualityForVideo(参数1、参数2、参数3);
}
编辑:

为了澄清这一点,如果您得到的是内存流,而不是超时流,我会怀疑将IEnumerable计算为
cqs
会在
IEnumerable
迭代时快速填充内存。我将使用LINQ查询(
Filter
等)来截断生成的
IEnumerable


另外(在评论中提醒),我会把钱花在你没有得到超时的原因上,因为
dc。Vid_GetQualityForVideo(param1,param2,param3)
计算成功。在返回时调用的以下
ToList()
导致溢出。对其执行一些基本断点检查将证实这一点。

如果查询很大,则
.ToList()
可能会导致性能问题。从查询中获得的
IEnumerable
将被延迟计算。但是,调用
.ToList()
将遍历结果的全部内容,将其放入结果的
列表中(
cqs

如果您确实希望函数的返回是
IEnumerable
,那么您可以只返回查询
IEnumerable

public IEnumerable<Quality> Get(DateTime param1, DateTime param2, string param3)
    {     

        var dc = new VideoDataContext(WebApplication.MonitorServer);

        dc.CommandTimeout = 240;

        return dc.Vid_GetQualityForVideo(param1, param2, param3);
    }
public IEnumerable Get(日期时间参数1、日期时间参数2、字符串参数3)
{     
var dc=新的VideoDataContext(WebApplication.MonitorServer);
dc.CommandTimeout=240;
返回dc.Vid_GetQualityForVideo(参数1、参数2、参数3);
}
编辑:

为了澄清这一点,如果您得到的是内存流,而不是超时流,我会怀疑将IEnumerable计算为
cqs
会在
IEnumerable
迭代时快速填充内存。我将使用LINQ查询(
Filter
等)来截断生成的
IEnumerable


另外(在评论中提醒),我会把钱花在你没有得到超时的原因上,因为
dc。Vid_GetQualityForVideo(param1,param2,param3)
计算成功。在返回时调用的以下
ToList()
导致溢出。对它进行一些基本的断点检查可以证实这一点。

请求可能运行良好,您的大数据通过网络接收。在这种情况下,不应出现超时异常。

可能请求工作正常,并且通过网络接收到您的大数据。在这种情况下,不应出现超时异常。

检查
上下文连接的连接字符串
,是否设置为true或false或根本未设置?检查
上下文连接的连接字符串
,是否设置为true或false或根本未设置?如果结果集太大,那么我相信在大数据检索仍在进行中时不会出现超时情况…忘记了这一部分,为答案添加澄清。它大约有500000行,每行大约有20-30列,因此它相当庞大。您可以对
ToList
必须完成的工作量进行餐巾纸计算,并计算每个元素的大小乘以预期返回值。结果可能是这个数字非常大。但是,对于您当前的问题,我建议您使用断点测试。假设我每隔几天通过两个日期,SSMS将花费6.5分钟,将列表返回到客户端将花费6.5分钟。我还遍历IEnumerable以获得记录的计数。这会迫切地检索数据吗?另外,如果resultset太大,那么我相信在检索大数据仍然很困难的情况下,不会出现超时情况