2011-03-31 6 views
4

가 나는 코드 성능/가비지 콜렉터적인 지침을 관리 개선이 아래 "에 충돌 한 :이 진술은 무엇을 의미합니까? 향상 .NET 응용 프로그램 성능 및 확장 성을 읽을 때

Avoid preallocating and chunking memory.

그러나이 책은 결코 미리 할당이 나쁜 이유에 대한 설명으로 간다 또는 청킹 정말 GC 최적화의 관점에서 무엇을 의미하는지.

가 someobody 문제에 더 많은 빛을 버리고 2 나쁜 그들이 정말 그물로 GC를 사용하여 측면에서 무엇을 의미합니까 왜 나에게 설명 할 수 있습니까?

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

답변

7

사전 할당 메모리는 확장 성이 좋지 않은 기술입니다. Chunking은 Large Object Heap에서 할당을 푸시 할 수 있습니다. 둘 중 하나는 불필요하게 메모리를 사용하게 만듭니다. 가비지 수집기를 신뢰하고 필요할 때 할당하십시오.

+0

@ 한스, 코드 조각을 참조하십시오. – dexter

+2

무엇? 요점은 당신이 이런 종류의 코드를 사용하지 않는다는 것입니다. –

+0

정확히 ... 어떤 종류의 코드입니까? GC를 사용하는 측면에서 어떤 할당인지 모르겠군요. – dexter

3

문제에 대해 몇 가지 이야기가 있습니다. 페이지 198 :

C++ 프로그래머는 종종 malloc에 ​​여러 통화를 절약하기 위해 한 번에 대용량 메모리 (사용의 malloc)의 블록 다음 사용 청크를 할당합니다. 이것은 여러 가지 이유로 관리 코드에 대한 권장하지 않습니다 : 관리되는 메모리의

  • 할당 빠른 동작과 가비지 컬렉터는 는 매우 빠른 할당에 최적화되어 있습니다. 관리되지 않는 코드에 메모리를 미리 할당하는 주된 이유는 할당 프로세스의 속도를 높이는 것입니다. 관리 코드에 대해서는 문제가 아닙니다.
  • 메모리를 미리 할당하면 필요한 것보다 많은 할당이 발생합니다. 이럴 경우 불필요한 가비지 수집을 트리거 할 수 있습니다.
  • 가비지 수집기가 수동으로 재활용하는 메모리를 회수 할 수 없습니다.
  • 사전 할당 된 메모리의 수명과 비용은 궁극적으로 릴리스 될 때 재활용하는 데 더 많은 비용이 듭니다.