这句话是什么意思?

时间:2011-03-31 20:05:32

标签: .net performance garbage-collection allocation chunking

在阅读提高.NET应用程序性能和可伸缩性时,我在“改进托管代码性能/垃圾收集器指南”中遇到了这个问题:

Avoid preallocating and chunking memory.

但这本书从未解释过为什么预分配是坏的或者Chunking在GC优化方面的真正含义。

有人可以更清楚地了解这个问题,并向我解释为什么这两个是坏的,它们在使用.net的GC方面有什么意义?

http://www.microsoft.com/downloads/en/details.aspx?FamilyId=8A2E454D-F30E-4E72-B531-75384A0F1C47&displaylang=en

2 个答案:

答案 0 :(得分:7)

预分配内存是一种无法很好扩展的技术。分块可以推动大对象堆中的分配。要么会让你不必要地使用内存。信任垃圾收集器,在需要时进行分配。

答案 1 :(得分:3)

关于问题的确有几点要说。页面198:

  

C ++程序员经常分配一大块内存(使用malloc)然后   一次使用块,以保存对malloc的多个调用。这是不可取的   托管代码有几个原因:

     
      
  • 管理内存的分配是一个快速操作,垃圾收集器具有   针对极快的分配进行了优化。预分配的主要原因   非托管代码中的内存是加快分配过程。这不是   托管代码的问题。
  •   
  • 如果预先分配内存,则会导致分配超出需要;这个可以   触发不必要的垃圾收集
  •   
  • 垃圾收集器无法回收您手动回收的内存。
  •   
  • 预分配的内存时间和最终发布后的回收成本更高。
  •