Response.IsClientConnected有用吗?

时间:2010-08-17 19:42:07

标签: asp.net

我想知道是否有人可以使用Response.IsClientConnected属性分享经验,作为asp.net网站的性能优化。

我问的原因是我对现实生活场景的效果有点怀疑。我理解在执行大型任务之前检查值的概念,但我无法看到这会有多大用处,因为客户端可能在任何时候断开连接。

2 个答案:

答案 0 :(得分:10)

我认为主要用途是优化长流程的交付。例如,如果必须生成大型报告或其他内容,则可以在单独的线程中运行报告,然后定期检查用户是否仍然连接。如果没有,你可以杀死这个长时间运行的进程,因为它不会不必要地运行,因为用户不再期待响应。

这有助于防止用户启动长进程,然后反复发出更多请求,因为他们可能认为它很慢或者某些东西。如果您没有进行此类检查,则可以根据所有请求对服务器征税,即使除了一个以外的所有请求都有效。这种情况可以通过只允许一个用户运行一个长时间运行的任务来处理,但它也有助于在多用户环境中确保您只花时间提供用户仍然连接并等待的请求回应。

注意:我之前从未实际使用过这个,这只是基于我对所读内容的基本理解。

答案 1 :(得分:10)

我在我的应用程序中广泛使用它,它可以为您节省大量资源。

尝试这样做:创建一个需要一段时间才能完成的页面,并在完成之前多次尝试刷新它。您将看到请求排队等待执行。想象一下,一个用户连接速度很慢并刷新他的页面很多次,以为这会获取页面(当所有用户都连接起来时,由于某些原因它变得很慢,网站可能会因资源而死的一个非常常见的问题)。 / p>

现在,更改它并在每个页面加载的开始时(或者在页面初始化),检查HttpContext.Current.Response.IsClientConnected以及在他没有被connetced的情况下抛出一个threadabord异常。您会看到,您的网站会更快回复。

实际上,我会在页面上的任何重击之前检查客户端是否已连接,以防止不必要的执行。在生产环境中,我已经看到,特别是在系统变慢的情况下,这种验证将有很大帮助。