2010-11-25 7 views
6

관리되지 않는 개체에 Add/RemoveMemoryPressure를 사용하는 올바른 방법은 무엇입니까? 관리되지 않는 개체가 있지만 STL 컨테이너 등을 많이 사용합니다. 관리되지 않는 개체의 전체 크기가 변경 될 때마다 관리되는 GC를 지속적으로 업데이트해야합니까? 아니면 원래 할당 크기입니까? 언제 RemoveMemoryPressure를 호출합니까? 파이널 라이저? Dispose()?관리되지 않는 개체에 대한 GC.AddMemoryPressure

+0

어떻게 가비지 수집기가 관리되지 않는 개체를 수집 할 것으로 예상합니까? – dtb

+1

@dtb : [GC.AddMemoryPressure] (http://msdn.microsoft.com/en-us/library/system.gc.addmemorypressure.aspx)는 x 바이트의 관리되지 않는 메모리가 할당 된 상태로 관리되는 개체가 있음을 런타임에 알립니다. (예 : COM 개체에 대한 참조가 있음). 이렇게하면 가비지 컬렉터가 죽은 객체를 찾고 최종 처리기를 실행하여 프로세스의 관리되지 않는 메모리를 확보 할 수 있습니다. –

+0

@dtb : 소유하고있는 관리 대상 개체를 수집합니다. – Puppy

답변

2
here 가입일

(및 @Wim COENEN 하였음) 간단한 사용 패턴

하는 관리 객체는 관리되지 않는 생성자 메모리 및 폐기에 릴리스 가 또는 방법을 완성을 할당한다. 관리되지 않는 메모리를 할당 한 후 AddMemoryPressure 메서드 을 호출하고 을 호출하고 해제 한 후 RemoveMemoryPressure 메서드를 호출하십시오. 좀 더 복잡한 시나리오에서

여기서 관리 개체 생전 변화 거의되지 않는 메모리 할당, 하면 런타임 이러한 점진적인 변화 통신 할 AddMemoryPressure 및 RemoveMemoryPressure 메소드를 호출 할 .

그래서 이러한 변화를 추적하기 위해 얼마나 많은 노력을 기울이고 얼마나 많은 이익을 얻을지 결정해야합니다.

+0

예 - 모든 할당을 마스터 개체에 알리기 위해 네이티브 개체의 기본 할당자를 변경 한 다음 관리 코드의 Dispose() 개체를 사용하여 모든 관리되는 방법의 변경 사항 GC를 자동으로 업데이트했습니다. – Puppy

관련 문제