2010-09-05 35 views
2

当我们使用使用定义的对象,例如:使用在C#中定义对象

 using (Login objLogin = new Login()) 

我知道,我们用的时候,我们想用这个对象后,清洁内存,但我不知道要等到我们清理内存。

回答

1

当一个对象是一次性的(它实现IDisposable接口),这意味着它可能会使用一些无法由垃圾回收器管理的非托管资源,因此如果您的对象被收集到这些资源中,资源可能会留在内存中导致一些问题。此问题的解决方案如下:

1.要在此类对象中实现IDisposable接口并在Dispose方法中清除/关闭非托管资源(例如,如果您在对象内部使用可丢弃对象,则会更好有一个Dispose方法调用其dispose内)

2.To打电话的时候了他们不需要一次性对象的Dispose方法,但要小心的原因重用一个释放的对象可以抛出一些例外。 你提到的使用语法是做同样的一小段路,它将此解释:成以下

using(var obj=new myDisposableObject) 
{ 
obj.Something(); 
} 

var obj=new myDisposableObject(); 
    try 
    { 
    obj.Something(); 
    } 
    catch 
    { 
    throw; 
    } 
    finally 
    { 
    obj.Dispose(); 
    } 

因此你总是可以确保无论发生什么情况的处置方法你的对象总是被调用。

+0

谢谢,但我didint了解你的回答的最后一行,从而.... 我想知道当一个对象使用一些非托管资源? – Arash 2010-09-05 08:00:31

+0

@arash:我的意思是即使发生异常,Dispose方法也会一直被调用。 通常,如果一个对象是一次性的,则意味着它使用非托管资源。否则,没有直接的方法可以认识到一个对象正在使用unmanged资源。 – Beatles1692 2010-09-05 08:07:33

3

using声明应该使用哪个实现IDisposable对象的及时处置。这实际上并不清理托管内存,但允许托管对象释放它可能持有的任何非托管资源,并且在某些情况下删除对托管对象的引用以防止内存泄漏。

我建议在以下网站其提供两种IDisposable的深度解释研读和using声明

0

您不清理内存;实现IDisposable的对象将在其Dispose方法中清除其非托管资源(或者至少,这意味着该类通过实现IDisposable来实现),并且.NET将在收集对象时清除内存。