我从HttpWebRequest (使用修改后的杰夫·里希特的CCR包装纸版本)获得响应,然后检查几个标头,以决定是否继续下载。有时我可能不想继续,因此我发布了response.Close和request.Abort。是否需要发出GetResponseStream然后关闭流,还是在调用response.Close时这是隐式的。
在发出GetResponse之后,docs状态
您必须调用Close方法来关闭流并释放连接。如果不这样做,可能会导致应用程序耗尽连接。
那么,这是否意味着一旦我们有了回应,就必须得到流并关闭它?
我们看到了一些相当奇怪的问题,在这些问题中,挂起的下载最终淹没了系统。这似乎是资源泄漏的最强人选,但不知道是否还有其他人在这个问题上有经验。
顺便说一句:假设GetResponseStream是同一条流,那么两次这样做安全吗?
发布于 2009-10-08 10:21:47
实际上,对webResponse.Close()的调用将关闭响应流。
响应是IDisposable,我建议您使用using语句。
发布于 2009-10-08 10:17:53
调用HttpWebResponse.Close隐式关闭响应流。
从文件中:
Close方法关闭响应流并释放到资源的连接,以供其他请求重用。 您必须调用Stream.Close或HttpWebResponse.Close方法来关闭流并释放连接以供重用。没有必要同时调用Stream.Close和HttpWebResponse.Close,但是这样做不会导致错误。未能关闭流会导致应用程序耗尽连接。
对于双GetResponseStream问题,尽管文档没有明确提到它,但是不管您调用它多少次,它总是返回相同的流对象。
发布于 2011-05-25 07:00:59
做一些像WCF连接这样的事情
//Done with the service, let's close it.
try
{
if (client.State != System.ServiceModel.CommunicationState.Faulted)
{
client.Close();
}
}
catch (Exception ex)
{
client.Abort();
}https://stackoverflow.com/questions/1536873
复制相似问题