4

.NETアプリケーションのパフォーマンスとスケーラビリティの向上を読んでいるときに、「マネージコードのパフォーマンス/ガベージコレクタのガイドラインの向上:」でこれにぶつかりました。

Avoid preallocating and chunking memory.

しかし、この本では、事前割り当てがなぜ悪いのか、またはGCの最適化に照らしてチャンキングが実際に何を意味するのかについては説明していません。

誰かがこの問題にもっと光を当てて、2つが悪い理由と、.netでGCを使用することに関してそれらが実際に何を意味するのかを私に説明できますか?

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

4

2 に答える 2

7

メモリの事前割り当ては、適切に拡張できない手法です。チャンキングにより、ラージオブジェクトヒープの割り当てがプッシュされる場合があります。どちらも不必要にメモリを使用するようになります。ガベージコレクターを信頼し、必要なときに割り当てます。

于 2011-03-31T20:06:57.830 に答える
3

問題が何であるかについて言うことがいくつかあります。ページ198:

C ++プログラマーは、多くの場合、(mallocを使用して)メモリの大きなブロックを割り当て、一度にチャンクを使用して、mallocへの複数の呼び出しを保存します。これは、いくつかの理由でマネージコードにはお勧めできません。

  • 管理対象メモリの割り当ては迅速な操作であり、ガベージコレクタは非常に高速な割り当て用に最適化されています。アンマネージコードでメモリを事前に割り当てる主な理由は、割り当てプロセスを高速化することです。これはマネージコードの問題ではありません。
  • メモリを事前に割り当てると、必要以上の割り当てが発生します。これにより、不要なガベージコレクションがトリガーされる可能性があります。
  • ガベージコレクタは、手動でリサイクルしたメモリを再利用できません。
  • 事前に割り当てられたメモリは、最終的にリリースされたときに古くなり、リサイクルにかかるコストが高くなります。
于 2011-03-31T20:11:01.500 に答える