可以使用哪种优化模式来提高垃圾收集器的性能?
我的理由是我使用Compact Framework做了很多嵌入式软件.在慢速设备上垃圾收集可能会成为一个问题,我想减少垃圾收集器启动的次数,当它发生时,我希望它能更快地完成.我还可以看到使用垃圾收集器而不是垃圾收集器可以帮助改进任何.NET或Java应用程序,尤其是重型Web应用程序.
以下是我的一些想法,但我没有做任何基准测试.
重用临时类/数组(保持分配计数)
将活动对象的数量保持在最低(更快的收集)
尝试使用结构而不是类
ctacke.. 12
关键是要了解CF GC如何用于分配.它是一个简单的标记 - 扫描,非代际GC,具有触发GC的特定算法,以及在收集后会导致压缩和/或投球的因素.在应用程序级别几乎没有什么可以控制GC(唯一可用的方法是Collect,它的使用非常有限,因为你无论如何都不能强制压缩).
对象重用是一个良好的开端,但简单地保持对象数量较少可能是最好的工具之一,因为所有的根都必须遍历任何集合操作.保持走路是一个好主意.如果压缩正在扼杀你,那么阻止段碎片会有所帮助.对象> 64k在这方面可能会有所帮助,因为它们获得了自己的段,并且与较小的对象区别对待.
为了真正了解CF GC的工作原理,我建议观看有关CF内存管理的MSDN网络广播.
关键是要了解CF GC如何用于分配.它是一个简单的标记 - 扫描,非代际GC,具有触发GC的特定算法,以及在收集后会导致压缩和/或投球的因素.在应用程序级别几乎没有什么可以控制GC(唯一可用的方法是Collect,它的使用非常有限,因为你无论如何都不能强制压缩).
对象重用是一个良好的开端,但简单地保持对象数量较少可能是最好的工具之一,因为所有的根都必须遍历任何集合操作.保持走路是一个好主意.如果压缩正在扼杀你,那么阻止段碎片会有所帮助.对象> 64k在这方面可能会有所帮助,因为它们获得了自己的段,并且与较小的对象区别对待.
为了真正了解CF GC的工作原理,我建议观看有关CF内存管理的MSDN网络广播.