使用IDisposable的正确方法是什么?

时间:2013-07-16 21:33:42

标签: c# dispose

在下面的示例中...由于类具有IDisposable接口,并且类本身只是一个管理内存对象(不是非托管内存),因此在下面的脚本中进一步说明(参见案例#1和案例# 2) - 使用列表对象完成处理时的正确方法是什么?

 public class VehicleA : IDisposable
 {
     public void Dispose() { }

     public string Year {get;set;}
     public string Make {get;set;}
     public string Model {get;set;}
 }
 public class repositoryVehicle()
 {
     public List<VehicleA> VehicleLookup()
     {
         List<VehicleA> returnVehicles = new List<Vehicle>();

         returnVehicles.Add(new VehicleA { Year="2007", Make="Ford", Model="Mustang" });
         returnVehicles.Add(new VehicleA { Year="2004", Make="Chevy", Model="Blazer" });

         return returnVehicles;
     }
 }

 //Case #1...
 foreach(var v in repositoryVehicle.VehicleLookup())
 {
     //v.Year...
 }

 //Case #2...
 List<VehicleA> vehicles = new List<VehicleA>();
 vehicles = repositoryVehicle.VehicleLookup();
 //vehicles[x].Year...

1 个答案:

答案 0 :(得分:2)

dispose模式仅用于访问非托管资源的对象。这是因为垃圾回收器在回收未使用的托管对象方面非常有效。

  

实现Dispose方法没有性能优势   仅使用托管资源(例如数组)的类型,因为它们   由垃圾收集器自动回收。使用Dispose   方法主要在使用本机资源的托管对象上   暴露给.NET Framework的COM对象。托管对象   使用本机资源(如FileStream类)实现的   IDisposable接口。

http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx