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