gpt4 book ai didi

c# - 为什么是 "Finalize method should not reference any other objects"?

转载 作者:太空狗 更新时间:2023-10-29 20:03:54 25 4
gpt4 key购买 nike

我一直在思考为什么建议我们不要在finalize中释放托管资源。如果您在 http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspx 看到代码示例,然后搜索字符串“Dispose(bool disposing) executes in two distinct scenarios”并阅读该评论,您就会明白我的意思。

我能想到的唯一可能性是,它可能与无法预测何时调用终结器这一事实有关。有谁知道正确答案吗?

谢谢,米沙尔

最佳答案

如果您从终结器中引用另一个对象,您不知道那个对象是否已经被终结 - 以及如果它被终结将如何表现. (我不知道当前是否有任何 CLR 运行多个终结器线程,但另一种可怕的可能性是当你的终结器运行时它正在被终结。)

您在终结器中需要做的就是释放您直接拥有的非托管资源。如果您要引用其他拥有资源的托管类型,请让它们在它们的终结器中完成它们的工作。

关于c# - 为什么是 "Finalize method should not reference any other objects"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2688636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com