我正在阅读.Net垃圾收集器的性能,并且正在为我的数据模型构建一组相互引用的类。我已经实现了Delete()方法,以从所有连接的对象中取消对象的引用,确保对象是可收集的。
虽然我目前不知道这是否会成为我的应用程序的一个问题,但我不得不考虑那些被提升到后代之后被删除的对象会发生什么情况。这样,他们就有可能在记忆中停留很长时间。
是否可以告诉垃圾收集器在下一个Gen0收集期间某个特定对象应该“降级”并释放?
发布于 2013-08-16 06:38:11
垃圾收集器可能进行的优化之一是尽可能长时间地将未引用的对象保留在内存中,从而将收集推迟到绝对必要的时候。这可以产生更少的集合,并在更多的对象/内存中共同分担集合的成本。
如果您的对象在被取消引用后在内存中保存了很长一段时间,这真的是一个问题吗?如果您的机器有足够的空闲内存,并且您的应用程序在取消引用后的占用空间没有增长,那么是否真的有一个缺点呢?
收集成本是一种保证成本,而使用额外内存的成本则不确定--它可能影响或不影响您的程序/其他程序。这种优化的关键点是,我们放弃了一定的成本,以换取不确定的成本。
发布于 2013-08-16 04:58:29
除了删除对调用GC.Collect的对象的引用之外,您不能手动地与GC交互。
关于这句话:
虽然我目前不知道这是否会成为我的申请的一个问题,但我不得不考虑.
当涉及到托管语言中的GC时,直到它成为一个问题,停止考虑它。如果您没有详细了解特定GC中为特定运行时使用的特定算法,那么您更有可能损害应用程序的性能,而不是试图修改GC的默认行为来帮助应用程序。
https://stackoverflow.com/questions/18265021
复制相似问题