gpt4 book ai didi

c# - 在 C# 中,我可以阻止对象从终结器中被垃圾收集吗?

转载 作者:太空狗 更新时间:2023-10-29 22:37:25 24 4
gpt4 key购买 nike

或者如果到达finalize方法已经晚了?

基本上我正在创建一些代码来登录到 MySql 数据库。每个日志条目都由一个对象表示并存储在队列中,直到它在批量插入/更新中被刷新到数据库中。我认为每次我想写一个条目时都在堆上创建一个新对象是低效的(特别是因为我可能想在性能敏感区域写一个或两个条目)。我的解决方案是创建一个对象池并重用它们。

基本上,我试图不重复发明轮子,方法是让 .Net 垃圾收集器让我知道某个对象何时不再需要并且可以添加回池中。问题是我需要中止析构函数的垃圾收集。那可能吗?

最佳答案

可以吗?可以。
你应该吗?不,这几乎可以肯定是个糟糕的主意。

C# 开发人员应记住以下一般规则:

If you find yourself writing a finalizer, you probably did something wrong.

成熟的托管 VM(例如 CLR 或 JVM)使用的内存分配器非常快。在这些系统中减慢垃圾收集器速度的原因之一是使用定制的终结器。为了优化运行时,您实际上是放弃了一个非常快的操作,转而支持一个慢得多的操作。此外,“起死回生”的语义难以理解和推理。

在考虑使用终结器之前,您应该了解以下文章中的所有内容

关于c# - 在 C# 中,我可以阻止对象从终结器中被垃圾收集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22155347/

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