【发布时间】:2011-10-02 16:26:02
【问题描述】:
在 C# 中,我知道当我的对象超出范围并且不再有指向它的指针/引用时,它们会被垃圾回收。发生这种垃圾回收时有没有办法运行一些自定义代码?
【问题讨论】:
-
是的,但您可能不应该这样做。你想做什么?
-
附注:对象通常不会立即收集。
-
@AlexFord:那么你最好使用
Dispose。如果你的终结器在DbContext被终结之后运行会发生什么?如果程序没有耗尽内存,终结器可能会在程序结束之前运行,然后它们会以不特定的顺序运行。 -
Alex Ford:这不会像你期望的那样工作。请参阅 SLaks 的最高评论,比 Ben Voigts(技术上正确)的答案更好的建议。
-
@AlexFord:是的,你绝对应该把你的清理逻辑放在
Dispose。并致电GC.SuppressFinalize(this);。然后写一个终结器,除了大声抱怨之外什么都不做,有人忘了打电话给Dispose。
标签: c# .net pointers garbage-collection