Udostępnij za pośrednictwem


ICorProfilerCallback4::SurvivingReferences2 — Metoda

Raportuje układ obiektów w stercie w wyniku niekompaktowania odzyskiwania pamięci. Ta metoda jest wywoływana, jeśli profiler zaimplementował interfejs ICorProfilerCallback4 . To wywołanie zwrotne zastępuje metodę ICorProfilerCallback2::SurvivingReferences , ponieważ może zgłaszać większe zakresy obiektów, których długość przekracza to, co można wyrazić w ULONG.

Składnia

HRESULT SurvivingReferences2(  
    [in] ULONG  cSurvivingObjectIDRanges,  
    [in, size_is(cSurvivingObjectIDRanges)] ObjectID  
                objectIDRangeStart[] ,  
    [in, size_is(cSurvivingObjectIDRanges)] SIZE_T  
                cObjectIDRangeLength[] );  

Parametry

cSurvivingObjectIDRanges
[w] Liczba bloków ciągłych obiektów, które przetrwały w wyniku niekompaktowanego odzyskiwania pamięci. Oznacza to, że wartość cSurvivingObjectIDRanges to rozmiar objectIDRangeStart tablic i cObjectIDRangeLength , które przechowują ObjectID odpowiednio długość i dla każdego bloku obiektów.

Następne dwa argumenty to tablice SurvivingReferences2 równoległe. Innymi słowy, objectIDRangeStart i cObjectIDRangeLength dotyczy tego samego bloku ciągłych obiektów.

objectIDRangeStart
[w] Tablica ObjectID wartości, z których każda jest adresem początkowym bloku ciągłych obiektów na żywo w pamięci.

cObjectIDRangeLength
[w] Tablica liczb całkowitych, z których każda jest rozmiarem ocalałego bloku ciągłych obiektów w pamięci.

Rozmiar jest określony dla każdego bloku, do którego odwołuje się tablica objectIDRangeStart .

Uwagi

Elementy objectIDRangeStart tablic i cObjectIDRangeLength powinny być interpretowane w następujący sposób, aby określić, czy obiekt przeżył odzyskiwanie pamięci. Załóżmy, że ObjectID wartość (ObjectID) znajduje się w następującym zakresie:

ObjectIDRangeStart[i]<= ObjectID<ObjectIDRangeStart[i] + cObjectIDRangeLength[i]

Dla dowolnej wartości i , która znajduje się w następującym zakresie, obiekt przetrwał odzyskiwanie pamięci:

0 <= i<cSurvivingObjectIDRanges

Niezwarte odzyskiwanie pamięci odzyskuje pamięć zajmowaną przez obiekty "martwe", ale nie kompaktuje tego zwolnionego miejsca. W związku z tym pamięć jest zwracana do sterty, ale nie są przenoszone żadne obiekty "aktywne".

Środowisko uruchomieniowe języka wspólnego (CLR) wywołuje niezwarte SurvivingReferences2 odzyskiwanie pamięci. W przypadku kompaktowania odzyskiwania pamięci funkcja MovedReferences2 jest wywoływana zamiast tego. Pojedyncze odzyskiwanie pamięci może być kompaktowane dla jednej generacji i niezwarte dla innego. W przypadku odzyskiwania pamięci w dowolnej generacji profiler otrzyma SurvivingReferences2 wywołanie zwrotne lub wywołanie zwrotne MovedReferences2 , ale nie oba.

Wiele SurvivingReferences2 wywołań zwrotnych może zostać odebranych podczas określonego odzyskiwania pamięci, ze względu na ograniczone buforowanie wewnętrzne, wiele wywołań zwrotnych podczas odzyskiwania pamięci serwera i inne przyczyny. W przypadku wielu wywołań zwrotnych podczas odzyskiwania pamięci informacje są skumulowane; wszystkie odwołania zgłaszane w dowolnym wywołaniu zwrotnym SurvivingReferences2 przetrwają odzyskiwanie pamięci.

Jeśli profiler implementuje zarówno interfejsY ICorProfilerCallback , jak i ICorProfilerCallback4 , SurvivingReferences2 metoda jest wywoływana przed metodą ICorProfilerCallback2::SurvivingReferences , ale tylko wtedy, gdy SurvivingReferences2 zostanie zwrócona pomyślnie. Profileers mogą zwrócić hrESULT, który wskazuje błąd z SurvivingReferences2 metody, aby uniknąć wywoływania drugiej metody.

Wymagania

Platformy: Zobacz Wymagania systemowe.

Nagłówka: CorProf.idl, CorProf.h

Biblioteki: CorGuids.lib

.NET Framework wersje: dostępne od wersji 4.5

Zobacz też