Response.Close()和Response.Dispose()有什么区别?

时间:2010-12-27 16:50:14

标签: c# response dispose

从资源清理的角度来看,为什么有Response.Close()Response.Dispose()以及哪一个更全面(请拨打另一个)?

3 个答案:

答案 0 :(得分:7)

如果提供了两种方法,Dispose的实施应该调用Close。使用using语句是一个好主意,以确保调用Dispose并因此调用Close,即使存在异常。

换句话说,这样做:

using (Response response = ...)
{
    // ...
}

不是这个:

Response response = ...;
// ...
response.Close(); // If there is an exception this might never get called!

关闭和处理对象之间的一个区别是,当你处置一个对象时,通常不可能再使用该对象(尝试这样做可能会导致抛出ObjectDisposedException),但是在调用Close之后它可能是可能仍然使用该对象。

请注意,如果您正在讨论ASP.NET,那么通常不应该在Response对象上调用Close或Dispose。

答案 1 :(得分:1)

来自Implementing Finalize and Dispose to Clean Up Unmanaged Resources

上开发类库的设计指南
  

偶尔会有一个特定于域的名称   比Dispose更合适。对于   例如,文件封装可能   想要使用方法名称关闭。在   这种情况下,私下实现Dispose   并创建一个公共Close方法   调用Dispose。以下代码   示例说明了这种模式。您   可以使用方法名称替换Close   适合您的域名。这个   示例需要System命名空间。

/ Do not make this method virtual.
// A derived class should not be allowed
// to override this method.
public void Close()
{
   // Call the Dispose method with no parameters.
   Dispose();
}

通常,只要资源可以打开或重新打开,我就会看到关闭,因为它为方法名称提供了很好的对称性。

答案 2 :(得分:0)

Response.Close()关闭与客户端的套接字连接。 Response.Dispose()是实现IDisposable接口并释放已分配资源的方法。

我认为Response.Close()是从Response.Dispose()方法调用的。

有关详细信息,请使用Reflector