我是否必须关闭我的代码从未访问过的Http Request输入流?

时间:2014-08-14 09:41:07

标签: c# asp.net .net stream httprequest

我在ASP.NET中运行了一些遗留代码,其工作原理如下:

void HandleRequest(HttpContext context)
{
    try {
       if( some condition ) {
          try {
             doSomething( context.Request.InputStream );
          } finally {
             context.Request.InputStream.Close();
          }
       }
       // moar code follows which doesn't access InputStream
    } finally {
        context.Request.InputStream.Close();
    }
}

请注意,无论是否访问InputStream,都会检索并关闭它。我想这是浪费时间,第二个.Close()是多余的。

我是否必须关闭我的代码从未访问过的HttpRequest输入流?

2 个答案:

答案 0 :(得分:2)

由于您未创建InputStream,因此您不应对其进行关闭。

这样的规则可以让我们保持理智 - 如果 负责关闭它,那么其他对象将由您负责? HttpContext有很多要检查的属性。如果他们向HttpContext添加新属性,现有代码会发生什么?

如果他们希望你有责任关闭它,那么它应该是public Stream CreateInputStream(),而绝对不是财产。

答案 1 :(得分:2)

没有。它将由HttpRuntime处理,HttpRuntime在请求完成后调用HttpContext.Request.Dispose。在这里查看源代码。 http://referencesource.microsoft.com/#System.Web/xsp/system/Web/HttpRuntime.cs#c0635347fb5a9826 http://referencesource.microsoft.com/#System.Web/xsp/system/Web/HttpRequest.cs#118b5aa7679e37f7