【发布时间】:2014-04-05 00:11:18
【问题描述】:
或者如果达到finalize方法已经晚了?
基本上,我正在创建一些代码来记录到 MySql 数据库。每个日志条目由一个对象表示并存储在一个队列中,直到它在批量插入/更新中被刷新到数据库中。我认为每次我想写一个条目时在堆上创建一个新对象效率低下(特别是因为我可能想在性能敏感区域写一个或两个条目)。我的解决方案是创建一个对象池并重用它们。
基本上,我试图通过让 .Net 垃圾收集器让我知道何时不再需要某个对象并且可以将其添加回池中,从而避免重新发明轮子。问题是我需要从析构函数中止垃圾收集。那可能吗?
【问题讨论】:
-
是的,你可以。战利品:stackoverflow.com/questions/3680281/…
-
想详细说明一下?为什么不只是重用对象,甚至从不取消引用它们呢?我不明白你为什么需要破坏垃圾收集器。
-
“中止垃圾回收”是什么意思?你的意思是你不想要 GC 调用的对象终结器?
-
为什么不将池分成两组。未使用的对象,以及当前正在使用的对象。给每个对象事件以告诉池它何时被保存。它控制它进入哪个组。
-
@MathewFoscarini 这就是我一开始所做的,但不幸的是,我不得不成为一个过度成功的人,我引入了一个打破这种方法的功能。这是一个高度多线程的应用程序(这就是我通过 MySql 进行日志记录的原因),因此我想要一种方法来使日志条目在逻辑上可排列以便于搜索。我做了一个功能,每个日志条目都有一个父条目,每个父条目都会跟踪它有多少个子条目。这意味着即使在日志条目被刷新到数据库之后,它也不能被重用,直到它的所有子条目都已经存在。我认为劫持 GC 是最简单的方法