Asp.net 我是否应该将HttpResponse.End()用于快速Web应用程序?

Asp.net 我是否应该将HttpResponse.End()用于快速Web应用程序?,asp.net,exception,premature-optimization,Asp.net,Exception,Premature Optimization,根据msdn,似乎抛出了一个异常。现在,我可以选择返回一个值来表示end thread(它只深入两个函数),也可以调用end() 我知道(阅读一篇关于C.Y./NET测试的注释),所以如果我想要一个快速的WebApp,当不容易调用它时,我应该考虑不调用它吗? -编辑-我在某些函数和类中的构造函数中确实有一个函数调用,以确保用户登录。因此,我在足够多的地方调用了HttpResponse.End(),但希望在常规站点使用中不会经常调用。您可以使用HttpResponse.Flush将数据推送到客户端

根据msdn,似乎抛出了一个异常。现在,我可以选择返回一个值来表示end thread(它只深入两个函数),也可以调用end()

我知道(阅读一篇关于C.Y./NET测试的注释),所以如果我想要一个快速的WebApp,当不容易调用它时,我应该考虑不调用它吗?


-编辑-我在某些函数和类中的构造函数中确实有一个函数调用,以确保用户登录。因此,我在足够多的地方调用了HttpResponse.End(),但希望在常规站点使用中不会经常调用。

您可以使用HttpResponse.Flush将数据推送到客户端,而不是完全终止请求,从而避免引发潜在的异常


注意:调用Response.End时并不总是引发该异常,仅当您提前结束请求时才会引发。

您可以使用HttpResponse.Flush将数据推送到客户端,而不是完全终止请求,从而避免引发潜在的异常


注意:调用Response.End时并不总是抛出该异常,仅当您提前结束请求时才会抛出该异常。

只需使用
Response.End
。在编写性能代码之前,先编写可维护性代码

此外,对web应用程序来说,重要的性能指标是可伸缩性。也就是说,您不应该问“我可以以多快的速度处理这个请求”,而应该问“我可以同时处理多少个请求?”


异常不会影响您的可伸缩性,从总体上看,一个请求多出几微秒算不了什么:记住,网络往返至少需要50毫秒:另外100微秒是噪声。

只需使用
响应。End
。在编写性能代码之前,先编写可维护性代码

此外,对web应用程序来说,重要的性能指标是可伸缩性。也就是说,您不应该问“我可以以多快的速度处理这个请求”,而应该问“我可以同时处理多少个请求?”


异常不会影响您的可伸缩性,从总体上看,一个请求多出几微秒算不了什么:记住,网络往返至少需要50毫秒:再多出100微秒就是噪音。

我如何知道它是否过早结束?或者,函数如何知道将来何时会过早结束?这是否意味着我可以调用.end();doSomeDBCode;doSomethingWithResponse()并将其结束?如果您自己调用
Response.end
,则它会抛出一个异常。如果您到达处理周期的末尾,那么系统会自动调用
Response.end
:这不是“过早的”。如何知道它是否过早结束?或者,函数如何知道将来何时会过早结束?这是否意味着我可以调用.end();doSomeDBCode;doSomethingWithResponse()并将其结束?如果您自己调用
Response.end
,则它会抛出一个异常。如果您到达处理周期的末尾,系统会自动调用
Response.end
:这不是“过早的”。处理单个请求所需的时间不影响您在给定时间内可以处理的请求量吗?就并发性能而言,网络延迟有多重要?有人会认为该应用程序正在帮助其他客户端,同时由于延迟等待来自其他客户端的数据。因此,我不确定单个客户端的延迟对总体并发性能有何影响。@Klingy:在某种程度上,是的,但可扩展性的改进可以独立地(甚至以牺牲)单个请求的响应时间为代价。我的观点主要是,您应该关注可伸缩性的改进,而不必太担心单个请求的响应时间(当然,这是合理的)。根据我难看的代码,每200毫秒可以出现13-20个异常(测试时间变化很大,为100毫秒)。或每500毫秒48次。因此,一个异常可能需要10毫秒,这比噪音还要多。然而,我确实喜欢答案中为可维护性和可伸缩性而写的部分,这就是为什么它被接受的原因。我注意到它不是微秒而是毫秒;)写得不好但非常合适的测试是@aciszombie24:Hmm,我以前从未测试过异常的性能。虽然我刚刚运行了您的测试,并且在230毫秒内得到10000个异常(.NET Framework 4,64位),所以他们可能已经做出了改进?附加说明:测试是在IDE的调试模式下运行的。我在VisualStudioIDE的发布模式下进行了尝试,得到了相同的结果。看起来1个异常大约需要10毫秒。测试的另一部分是不相关的(在一个正常的func调用中返回1。它可以每500ms执行>200k。但是我们在这里测试异常时间。不是函数调用。)处理单个请求所需的时间不影响您在给定时间内可以处理的请求量吗?就并发性能而言,网络延迟有多重要?有人会认为该应用程序正在帮助其他客户端,同时由于延迟等待来自其他客户端的数据。因此,我不确定单个客户端的延迟对总体并发性能有何影响。@Klingy:在某种程度上,是的,但可扩展性的改进可以独立地(甚至以牺牲)单个请求的响应时间为代价。我的观点主要是,您应该关注可伸缩性的改进,而不必太担心单个请求的响应时间(当然,这是合理的)。根据我难看的代码,每200毫秒可以出现13-20个异常(测试时间变化很大,为100毫秒)。或每500毫秒48次。因此,一个异常可能需要10毫秒,这比噪音还要多。然而,我确实喜欢答案中为可维护性和可伸缩性而写的部分,这就是为什么它被接受的原因。我注意到它不是微秒而是毫秒;)这本书写得很差,但却很合适