我需要处理我不使用的返回对象吗?

4
我有以下代码:

WebRequest request = WebRequest.Create("ftp://myServer/myDirectory");
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.Credentials = new NetworkCredential("userName", "password");

request.GetResponse();

我需要处理由WebRequest返回的WebResponse对象吗?
3个回答

10

你应该使用using语句将其包装起来,在超出其作用域时,将自动进行处理

using (var response = request.GetResponse())
{

}

即使你不手动释放,它最终也会被释放,但你真的应该手动释放。 - cadrell0

4
就“必须处理”而言,我会说不需要。当CLR检测到对象没有引用时,该对象将被安排进行垃圾回收。你可能遇到的问题是,不能保证对象及其属性以正确的顺序清除。简单的对象/类,无论是.NET Framework的一部分还是自定义的对象/类,很少实现iDisposable接口。如果一个对象/类实现了iDisposable,你应该调用dispose方法来确保正确处理清理,因为设计者有些迹象表明需要以特定方式进行清理。正如Stecya所述,使用using块包装是自动完成此操作的好方法。你也可以使用try/finally块来实现相同的效果(在finally块中处理对象的释放)。

你这里似乎有些自相矛盾。大多数IDisposable都需要显式处理,否则可能会出错。不能依赖GC来释放资源。这对于资源和应用程序类型的影响程度取决于具体情况。 - H H

3

是的,你应该这样做。你说得对,这不是很明显,通常你只需要Dispose你创建的对象(使用new),而将从另一个组件获取/借用的对象保留。

关键在于WebRequest.Create()的名称和描述,它是一个工厂方法,代表您创建某些东西,并且调用方(即您)负责返回值。

当然,首选的语法是using() {}块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接