2011-03-31 61 views
4

当读取提高.NET应用程序性能和可伸缩性我已经碰到了提高托管代码的性能/垃圾收集Guidlines这下”:这个说法是什么意思?

Avoid preallocating and chunking memory.

但该书从未进入解释,为什么预分配是坏或者什么分块的真正含义在GC优化的光。

someobody可以阐明这个问题更多的光线,为什么2是不好的,他们到底在使用GC与.NET的术语的意思给我解释一下?

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

回答

7

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

+0

@Hans,代码片段好吗? – dexter 2011-03-31 20:07:29

+2

什么?关键是你*不*使用这种类型的代码。 – 2011-03-31 20:08:37

+0

究竟......什么样的代码?我想我不知道使用GC的分配是什么...... – dexter 2011-03-31 20:09:22

3

它有几件事情要说什么问题。页面198:

C++程序员经常一次分配的存储器(用malloc)大的块,然后使用 块,将其保存到malloc的多个呼叫。这是不可取的 托管代码有以下几个原因:

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