2012-06-13 1 views

답변

3

닷넷 런타임은 메모리의 모든 작업을 담당한다. 메모리 할당자를 오버라이드 (override) 할 수있는 방법이 없습니다. 그렇게하면 GC가 작동하는 방식이 크게 달라집니다.

메모리 풀이 CLR에 의해 이미 "관리"되고 새 개체를 할당하지 않아도되므로 개체 할당이 .NET 환경에서 훨씬 저렴하므로 .NET에서 훨씬 적은 이점을 제공합니다. 반드시 새로운 메모리를 트리거해야합니다 (일반적으로 이미 할당 된 메모리를 지우고 사용하는 것입니다).

2

SmartHeap의 명성에 대한 주장으로, 나는 15 년 전부터 힙 잠금 장치에 대한 경합을 피할 수 있다는 것을 확실히 기억한다. 관리되는 프로그램의 힙 (heap)은 기본 프로그램에서 사용되는 힙과 공통점이 없으므로 SmartHeap과 같은 제품은 확실히 사용되지 않습니다.

하지만 같은 종류의 잠금 장치가 있습니다. 네이티브 코드에서와 같이 문제가 거의 없지만 가비지 수집 힙의 힙 할당은 매우입니다. 이는 포인터 증가분 일뿐입니다. 네이티브 힙 할당자는 조각화를 피하기 위해 더 많은 작업을해야합니다. 따라서 두 개 이상의 관리되는 스레드가 에 정확히에 할당하는 확률은 그리 좋지 않습니다.

그럼에도 불구하고 .NET CLR 에서 여러 힙을 지원합니다. 이 기능은 서버 버전의 Windows에서 자동으로 활성화됩니다. app.exe.config 파일에서 <gcServer> element을 사용하여 의도적으로 강제로 적용 할 수 있습니다. 부작용은 잠금 경합이 매우 낮을 것이고, 진짜 의도는 여러 스레드에서 동시에 쓰레기를 수집하는 것입니다.

전원을 켜서 눈에 띄는 차이가 있는지 확인할 수 있습니다. 더 많은 메모리를 소비하고 가비지 수집 일시 중지가 대화식 UI 종류의 프로그램에서 눈에 띄게 될 수 있음을 유의하십시오. 백그라운드 GC는 서버 GC에서 사용할 수 없으며 .NET 4.5

에서 사용할 수 있습니다.
관련 문제