Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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