【发布时间】:2016-12-21 08:11:44
【问题描述】:
我的一位前辈告诉我使用try/ finally 块来清除初始化对象数据的所有方法。
例如:
var serviceProxy = new NotificationServiceProxy();
try
{
return serviceProxy.GetNotifications(userID, request.Filters, request.FilterProperty, usertypeid);
}
finally
{
serviceProxy = null;
}
这是一个好习惯吗?如果我在所有方法中使用try/ catch 来清除已初始化的对象数据。
【问题讨论】:
-
没有必要像这样清除变量。一旦它们离开作用域,它们就会被垃圾回收(如果可能的话,甚至更早)。
-
这取决于您要清除的变量类型。值类型 - 不需要。参考类型 - 是的,你可以
-
@SouvikGhosh:这是不正确的。如果您将引用类型的变量设置为
null,您只会取消引用它。它仍然会留在堆上,直到它被收集。如果您不将其设置为 null,它将在方法退出时取消引用(并且仍保留在堆上)。 -
@Sefe 我的意思是一些 COM 对象或网络对象。我们不是优雅地释放它们而不是依赖 GC 吗?
-
@SouvikGhosh:如果需要释放对象,则需要处置它们。取消引用对释放任何内容没有任何作用。它只是取消引用,不多也不少。
标签: c# garbage-collection try-finally