Megosztás a következőn keresztül:


ICorProfilerCallback::MovedReferences metódus

Egy tömörítő szemétgyűjtés miatt a halom objektumainak új elrendezését kell jelenteni.

Szemantika

HRESULT MovedReferences(
    [in]  ULONG  cMovedObjectIDRanges,
    [in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
    [in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
    [in, size_is(cMovedObjectIDRanges)] ULONG    cObjectIDRangeLength[] );

Paraméterek

cMovedObjectIDRanges [in] A tömörítési szemétgyűjtés eredményeként áthelyezett összefüggő objektumok blokkjainak száma. Ez azt jelzi, hogy az érték cMovedObjectIDRanges a tömbök és cObjectIDRangeLength a oldObjectIDRangeStarttömbök newObjectIDRangeStartteljes mérete.

A következő három argumentum MovedReferences a párhuzamos tömbök. Más szóval, oldObjectIDRangeStart[i], newObjectIDRangeStart[i]és cObjectIDRangeLength[i] minden egybefüggő objektumok egyetlen blokkját érinti.

oldObjectIDRangeStart [in] Értékek tömbje ObjectID , amelyek mindegyike az egybefüggő, élő objektumok egy blokkjának régi (szemétgyűjtés előtti) kezdőcíme a memóriában.

newObjectIDRangeStart [in] Értékek tömbje ObjectID , amelyek mindegyike az egybefüggő, élő objektumok blokkjának új (szemétgyűjtés utáni) kezdőcíme a memóriában.

cObjectIDRangeLength [in] Egész számok tömbje, amelyek mindegyike a memóriában lévő összefüggő objektumok blokkjának mérete.

A tömbökben és newObjectIDRangeStart tömbökben oldObjectIDRangeStart hivatkozott minden blokkhoz meg van adva méret.

Megjegyzések

Fontos

Ez a metódus a 4 GB-nál nagyobb méretű objektumokat jelenti MAX_ULONG a 64 bites platformokon. A 4 GB-nál nagyobb objektumok méretének lekéréséhez használja inkább az ICorProfilerCallback4::MovedReferences2 metódust.

A tömörítő szemétgyűjtő visszanyeri az elhalt objektumok által elfoglalt memóriát, és tömöríti a helyet. Ennek eredményeképpen előfordulhat, hogy az élő objektumok a halomba kerülnek, és ObjectID a korábbi értesítések által elosztott értékek megváltozhatnak.

Tegyük fel, hogy egy meglévő ObjectID érték (oldObjectID) a következő tartományon belül található:

oldObjectIDRangeStart[i] <= oldObjectID<oldObjectIDRangeStart[i] + cObjectIDRangeLength[i]

Ebben az esetben a tartomány elejétől az objektum elejéig az alábbi eltolás történik:

oldObjectID - oldObjectRangeStart[i]

Ennek bármilyen értéke i a következő tartományban van:

0 <= i<cMovedObjectIDRanges

az újat ObjectID az alábbiak szerint számíthatja ki:

newObjectID = newObjectIDRangeStart[i] + (oldObjectID - oldObjectIDRangeStart[i])

Az átadott MovedReferences értékek egyike ObjectID sem érvényes a visszahívás során, mivel a szemétgyűjtés a régi helyekről az új helyekre történő objektumok áthelyezésének közepén lehet. Ezért a profilkészítők nem kíséreljék meg az objektumok vizsgálatát hívás MovedReferences közben. Az ICorProfilerCallback2::GarbageCollectionFinished visszahívás azt jelzi, hogy az összes objektum át lett helyezve az új helyre, és az ellenőrzés elvégezhető.

Requirements

Platformok: Lásd a rendszerkövetelményeket.

Fejléc: CorProf.idl, CorProf.h

Könyvtár: CorGuids.lib

.NET-keretrendszerverziók: 2.0 óta elérhető

Lásd még