从终结器访问非终结对象
本文关键字:对象 访问 | 更新日期: 2023-09-27 18:19:06
我想从其他实例的终结器访问没有终结器的对象。
我知道从终结器访问其他可终结对象是一个坏主意,因为终结器调用的序列是不确定的。
但是如果从其他对象的结束器访问没有结束器的实例呢?我想不出来,只能在文章中找到http://edn.embarcadero.com/article/29365:
这意味着终结器永远不应该访问其他的终结器对象(没有终结器的对象也可以)
在MSDN中是否有任何确认?
目前我想获得锁对象类型的object
变量,但我想确保它是OK的,object
实例在访问它之前没有从内存中释放。
当前我想获取锁对象类型为object
的变量
在你的终结器中访问那个对象是可以的,它没有发生任何事情。实际上使用锁语句,这不是很好。阻塞终结器线程会导致严重的字节化。它在程序退出时有一个超时,它必须完成并在两秒钟内完成所有工作。您不能使用Monitor.TryEnter()来避免触发该超时,这将是一个糟糕的资源泄漏。
注意代码气味,当其他线程仍然可以访问终结器时,您不应该释放您编写的本机资源。只有当不再有人保持对对象的引用时,终结器才能运行,这是一个真理。这也意味着锁不再有任何意义,因为没有线程可以有引用了。当没有人可以读写共享状态时,没有必要用锁来保护共享状态。
请记住,实际编写终结器几乎总是错误的,本机资源应该由其相应的。net包装器类来终结。有很多,底层的是SafeHandle的派生类
对象在拥有根之前不会被收集。假设您正在谈论的object
实例是正在完成的对象的成员,那么object
一直是活动的-因为根是f可达队列。