Udostępnij za pośrednictwem


ICorProfilerCallback2::SurvivingReferences — Metoda

Raportuje układ obiektów w stercie w wyniku niezwartego odzyskiwania pamięci.

Składnia

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

Parametry

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

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

objectIDRangeStart
[in] 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
[in] 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ślany dla każdego bloku, do którego odwołuje się tablica objectIDRangeStart .

Uwagi

Ważne

Ta metoda zgłasza rozmiary MAX_ULONG obiektów, które są większe niż 4 GB na platformach 64-bitowych. W przypadku obiektów, które są większe niż 4 GB, zamiast tego użyj metody ICorProfilerCallback4::SurvivingReferences2 .

Elementy objectIDRangeStart tablic i cObjectIDRangeLength powinny być interpretowane w następujący sposób, aby określić, czy obiekt przetrwał odzyskiwanie pamięci. Załóżmy, że ObjectID wartość (ObjectID) leży 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 kompakuje wolnego 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 SurvivingReferences niezwarte odzyskiwanie pamięci. W przypadku kompaktowania odzyskiwania pamięci zamiast tego wywoływana jest funkcja ICorProfilerCallback::MovedReferences . Pojedyncze odzyskiwanie pamięci może być kompaktowane dla jednej generacji i niezwarte dla innego. W przypadku odzyskiwania pamięci w przypadku każdej konkretnej generacji profiler otrzyma SurvivingReferences wywołanie zwrotne lub MovedReferences wywołanie zwrotne, ale nie oba te elementy.

Podczas odzyskiwania pamięci może zostać odebranych wiele SurvivingReferences wywołań zwrotnych z powodu ograniczonego buforowania wewnętrznego, wielu wątków raportowania w przypadku odzyskiwania pamięci serwera i innych powodów. W przypadku wielu wywołań zwrotnych podczas odzyskiwania pamięci informacje są zbiorcze — wszystkie odwołania zgłoszone w każdym wywołaniu zwrotnym SurvivingReferences przetrwają odzyskiwanie pamięci.

Wymagania

Platformy: Zobacz Wymagania systemowe.

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

Biblioteki: CorGuids.lib

wersje .NET Framework: dostępne od wersji 2.0

Zobacz też