我已经阅读了很多关于终结器和IDisposableC#的内容.当我终于从终结者的这种可怕的混乱中清楚地看到IDisposable,突然间,突然间,出现了这个SafeHandle的事情.我的信念再次完全动摇了.我应该用什么?
第0代:所以我读到当gen 0超过大小阈值时gen 0触发.但我也读到GC不是在"新"中执行,因为"新"只是向前滑动地址.那么,什么时候检查它是否超过了触发gen 0 GC的阈值?
Gen 1/2:gen 1/2有自己的大小阈值触发GC吗?他们什么时候考虑门槛?是幸存者晋升为天才的那一刻吗?
这是否意味着gen 1 GC发生它首先检查gen 0,然后将它们提升到gen 1,只发现gen 1超过了阈值,所以它检查gen 1,并再次检查gen 0?
这是否意味着发生gen 2 GC它首先检查gen 0,然后将它们提升到gen 1,只发现gen 1已超过阈值,因此它检查gen 1,并再次检查gen 0.然后将gen 0升级到gen 1,将gen 1升级到gen 2,只发现gen 2已超过阈值,因此它再次检查gen 2,gen 1和gen 0?
当看到整个 finalizer/IDisposable 问题时,通常会看到,在所有冗长的描述之后,最后都会有“哈哈,我说的实际上没用,你应该使用 SafeHandle 代替再见”的意思!” 所以我想知道在什么情况下 SafeHandle 不适合,以至于你不得不求助于终结器/IDisposable 旧方法?
有些类如DataTable已经在其构造函数中调用了SuppressFinalize,因此没有必要在其上调用dispose/use.(因为处置是为了更早发布,但没有什么可以释放)
那么,我想知道这些类的列表或通过反射找到这些类的列表的方法?