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 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