如何在c#早期清除内存

use*_*949 1 .net c# garbage-collection

在完成使用varible之后,我可以在GC之前清除内存吗?

Zoo*_*oba 9

如果需要立即释放特定资源,请实现IDisposable接口并调用Dispose()(有时Close()在某些对象上,例如流).

如果您希望防止密码在其生命周期内保留在内存中,请SecureString支持此功能,但使用起来并不简单.

否则,您无法控制垃圾收集器何时运行或实际执行的操作.如果你迫切需要这种控制,你需要一种较低级别的语言.

  • 从技术上讲,你可以通过GC.Collect()方法进行一些控制,这可以强制进行内存回收尝试.我确实同意GenericTypeTea的评论,但出于同样的原因我给了你+1.:) (4认同)
  • 从内存中调用 Dispose() 不会立即自动处置 - 它只是标记为处置 - 这实际上会根据 GC 的突发奇想来完成 (2认同)

Sas*_*nyi 5

将其值设置为 null。如果没有找到该对象的其他引用,GC 将收集它(在下一次 GC 运行期间)。但您无法自行清除内存(非托管资源除外)。

  • 将引用对象设置为 null 不会将其从内存中清除。它只是将其标记为稍后由 GC 删除,**而不是**立即删除。所有将变量设置为 null 的做法都会弄脏代码,除非有特定的逻辑/代码相关原因将其设置为 null。 (2认同)
  • @Generic“标记”它以进行删除也有点不准确,没有标记。相反,当 GC 分析内存图时,它会发现该对象没有留下任何引用,这就是它知道该对象是否适合回收的方式。 (2认同)

May*_*ank 5

正如@Hinek所说,您应该致电GC.Collect()。但是,如果您希望立即清除内存,仅凭它并不能起到作用。您应该致电:

   //Force garbage collection.
   GC.Collect();

   // Wait for all finalizers to complete before continuing.
   GC.WaitForPendingFinalizers();
Run Code Online (Sandbox Code Playgroud)