本机资源清理和不调用Dispose

时间:2017-10-11 20:54:02

标签: c# garbage-collection

任何人都可以解释为什么不显式调用Dispose(),并且仍然会清理本机资源。它会被隐含地调用吗?

我来到了下面

  

调用Dispose不需要保证本机资源清理。   原生资源清理最终总会发生;调用   Dispose可让您控制何时进行清理。

  // Create the bytes to write to the temporary file.  
  Byte[] bytesToWrite = new Byte[] { 1, 2, 3, 4, 5 };  

  // Create the temporary file.  
  FileStream fs = new FileStream("Temp.dat", FileMode.Create);  

  // Write the bytes to the temporary file.  
  fs.Write(bytesToWrite, 0, bytesToWrite.Length);  

  // Explicitly close the file when finished writing to it.  
  //fs.Dispose();

应在finally块中的代码中或通过using语句显式调用Dispose。

2 个答案:

答案 0 :(得分:1)

当垃圾收集器获取操作系统的资源时,它会清理未引用的对象,但如果你有一个频繁使用的应用程序,那么不必等待它就没那么有用,因为否则你的内存会被填满。然后使用Dispose是非常必要的。

更新: 这些对象甚至不需要实现IDisposable来清理,因为它是被调用的Finalize-Method。

答案 1 :(得分:1)

configurations.maybeCreate("default") artifacts.add("default", file("NAME_OF_YOUR_FILE.aar")) 包含Finalize method,内部调用.active

switch

这意味着当对象不再可以访问时,Finalizer最终会调用它。当然,最好明确地致电$('.tab-pane.active').attr('aria-labelledby'),因为它让你可以像你提到的那样确定控制清理。