当我们用于定义对象时?例如:
using (Login objLogin = new Login())
我知道我们在使用此对象后想要清理内存时使用但我不知道何时应该清理内存。
答案 0 :(得分:3)
using
语句应该用于及时处理实现IDisposable
的对象。这实际上并不清理托管内存,但允许托管对象释放它可能持有的任何非托管资源,并在某些情况下删除对托管对象的引用以防止内存泄漏。
我建议您阅读以下网站,这些网站提供IDisposable
和using
声明的深入解释
答案 1 :(得分:1)
每当一个对象是一次性的(它实现IDisposable接口)时,它意味着它可能使用一些无法由垃圾收集器管理的非托管资源,因此如果收集了对象,这些资源可能会留在内存中导致一些问题。这个问题的解决方案是:
1.在这种对象中实现IDisposable接口,并在Dispose方法中清除/关闭非托管资源(例如,如果你在对象中使用一次性对象,最好有一个Dispose方法来调用它处置内部)
2.在不再需要的情况下调用一次性对象的Dispose方法但要小心,因为重复使用已处理的对象会引发一些异常。 您提到的使用语法是一种简单的方法,它解释了这一点:
using(var obj=new myDisposableObject)
{
obj.Something();
}
进入以下:
var obj=new myDisposableObject();
try
{
obj.Something();
}
catch
{
throw;
}
finally
{
obj.Dispose();
}
因此,您始终可以确定无论发生什么,始终都会调用对象的Dispose方法。
答案 2 :(得分:0)
你不清理记忆;实现IDisposable的对象将在其Dispose方法中清除其非托管资源(或者至少,这是该类通过实现IDisposable而产生的含义),并且.NET将在收集对象时清理内存。