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


Profilkészítési környezet beállítása

Megjegyzés:

A .NET-keretrendszer 4-ben jelentős változások történtek a profilkészítésben.

Amikor egy felügyelt folyamat (alkalmazás vagy szolgáltatás) elindul, betölti a közös nyelvi futtatókörnyezetet (CLR). A CLR inicializálásakor a következő két környezeti változót értékeli ki annak eldöntésére, hogy a folyamatnak csatlakoznia kell-e egy profilkészítőhöz:

  • COR_ENABLE_PROFILING: A CLR csak akkor csatlakozik egy profilozóhoz, ha ez a környezeti változó létezik, és 1 értékre van állítva.

  • COR_PROFILER: Ha a COR_ENABLE_PROFILING ellenőrzés sikeres, a CLR csatlakozik ahhoz a profilozóhoz, amely rendelkezik ezzel a CLSID-vel vagy ProgID-vel, amelyet korábban a beállításjegyzékben kellett tárolni. A COR_PROFILER környezeti változó sztringként van definiálva, ahogy az alábbi két példában is látható.

    set COR_PROFILER={32E2F4DA-1BEA-47ea-88F9-C5DAF691C94A}
    set COR_PROFILER="MyProfiler"
    

CLR-alkalmazás profilozásához az alkalmazás futtatása előtt be kell állítania a COR_ENABLE_PROFILING és COR_PROFILER környezeti változókat. Azt is meg kell győződnie, hogy a profilkészítő DLL regisztrálva van.

Megjegyzés:

A .NET-keretrendszer 4-től kezdve a profilkészítőket nem kell regisztrálni.

Megjegyzés:

A .NET-keretrendszer 2.0-s, 3.0-s és 3.5-ös verziójának a .NET-keretrendszer 4- és újabb verzióiban való használatához be kell állítania a COMPLUS_ProfAPI_ProfilerCompatibilitySetting környezeti változót.

Környezeti változó hatóköre

A COR_ENABLE_PROFILING és COR_PROFILER környezeti változók beállítása határozza meg a hatás hatókörét. Ezeket a változókat a következő módok egyikével állíthatja be:

  • Ha egy ICorDebug::CreateProcess hívásban állítja be a változókat, azok csak az adott időben futó alkalmazásra lesznek érvényesek. (Ezek a környezet öröklő alkalmazás által indított egyéb alkalmazásokra is érvényesek lesznek.)

  • Ha a változókat parancssori ablakban állítja be, azok az adott ablakból indított összes alkalmazásra érvényesek lesznek.

  • Ha a változókat felhasználói szinten állítja be, azok a Fájlkezelővel kezdődő összes alkalmazásra érvényesek lesznek. A változók beállítása után megnyíló parancssori ablakban ezek a környezeti beállítások jelennek meg, és minden alkalmazás, amelyet az adott ablakból indít. Ha felhasználói szinten szeretné beállítani a környezeti változókat, kattintson a jobb gombbal a Saját számítógép elemre, kattintson a Tulajdonságok elemre, kattintson a Speciális fülre , kattintson a Környezeti változók elemre, és adja hozzá a változókat a Felhasználói változók listához.

  • Ha a változókat a számítógép szintjén állítja be, azok a számítógépen elindított összes alkalmazásra érvényesek lesznek. A számítógépen megnyitott parancssori ablakban ezek a környezeti beállítások lesznek, és az adott ablakból kiinduló alkalmazások is. Ez azt jelenti, hogy a számítógépen minden felügyelt folyamat a profilkészítővel kezdődik. A környezeti változók számítógépszinten való beállításához kattintson a jobb gombbal a Saját számítógép elemre, kattintson a Tulajdonságok elemre, kattintson a Speciális fülre , kattintson a Környezeti változók elemre, adja hozzá a változókat a rendszerváltozók listájához, majd indítsa újra a számítógépet. Az újraindítás után a változók rendszerszintűen is elérhetők lesznek.

Windows-szolgáltatás profilkészítése esetén a környezeti változók beállítása után újra kell indítania a számítógépet, és regisztrálnia kell a profilkészítő DLL-t. Ezekről a szempontokról további információt a Windows-szolgáltatás profilkészítése című szakaszban talál.

További szempontok

  • A profilelő osztály implementálja az ICorProfilerCallback és az ICorProfilerCallback2 interfészeket. A .NET-keretrendszer 2.0-s verziójában a profilkészítőnek implementálnia ICorProfilerCallback2kell. Ha nem, ICorProfilerCallback2 akkor a rendszer nem tölti be.

  • Egy adott környezetben egyszerre csak egy profilozó képes profilkészítésre. Két különböző profilkészítőt regisztrálhat különböző környezetekben, de mindegyiknek külön folyamatokat kell profillal rendelkeznie. A profilkészítőt folyamaton belüli COM-kiszolgáló DLL-ként kell implementálnia, amely a profilkészítés alatt álló folyamat címterébe van leképezve. Ez azt jelenti, hogy a profilkészítő folyamatban fut. A .NET-keretrendszer semmilyen más típusú COM-kiszolgálót nem támogat. Ha például egy profilkészítő távoli számítógépről szeretné monitorozni az alkalmazásokat, minden számítógépen gyűjtőügynököket kell implementálnia. Ezek az ügynökök kötegelik az eredményeket, és közlik őket a központi adatgyűjtési számítógéppel.

  • Mivel a profilkészítő egy folyamat közben példányosított COM-objektum, minden profilozott alkalmazás saját másolatot kap a profilozóról. Ezért egyetlen profilkészítő példánynak nem kell több alkalmazás adatait kezelnie. Azonban hozzá kell adnia logikát a profilozó naplózási kódjába, hogy megakadályozza a naplófájlok felülírását más profilalapú alkalmazásokból.

A profilkészítő inicializálása

Ha mindkét környezeti változó ellenőrzése sikeres, a CLR a COM CoCreateInstance függvényhez hasonlóan hozza létre a profilozó egy példányát. A profilkészítő nem töltődik be közvetlen hívással a következőre CoCreateInstance: . Ezért a rendszer elkerüli a CoInitializemenetmodell beállítását igénylő hívásokat. A CLR ezután meghívja az ICorProfilerCallback::Initialize metódust a profilozóban. Ennek a módszernek az aláírása a következő.

HRESULT Initialize(IUnknown *pICorProfilerInfoUnk)

A profilozónak le kell kérdeznie pICorProfilerInfoUnk egy ICorProfilerInfo vagy ICorProfilerInfo2 felületmutatót, és mentenie kell, hogy később további információkat kérjen a profilkészítés során.

Eseményértesítések beállítása

A profilozó ezután meghívja az ICorProfilerInfo::SetEventMask metódust, amely megadja, hogy mely értesítések kategóriái érdeklik. Ha például a profilkészítőt csak a függvények beírása és elhagyása, valamint a szemétgyűjtési értesítések érdeklik, az alábbiakat adja meg.

ICorProfilerInfo* pInfo;
pICorProfilerInfoUnk->QueryInterface(IID_ICorProfilerInfo, (void**)&pInfo);
pInfo->SetEventMask(COR_PRF_MONITOR_ENTERLEAVE | COR_PRF_MONITOR_GC)

Az értesítési maszk ilyen módon történő beállításával a profilkészítő korlátozhatja a kapott értesítéseket. Ez a módszer segít a felhasználónak egy egyszerű vagy speciális célú profilkészítő létrehozásában. Emellett csökkenti a processzoridőt, amely az értesítések küldésére pazarolja azokat az értesítéseket, amelyeket a profilkészítő egyszerűen figyelmen kívül hagy.

Egyes profilkészítő események nem módosíthatók. Ez azt jelenti, hogy amint ezek az események be vannak állítva a ICorProfilerCallback::Initialize visszahívásban, nem kapcsolhatók ki, és az új események nem kapcsolhatók be. A nem módosítható események módosítására tett kísérletek sikertelen HRESULT-t eredményeznek ICorProfilerInfo::SetEventMask .

Windows-szolgáltatás profilkészítése

A Windows-szolgáltatások profilozása olyan, mint egy közös nyelvi futtatókörnyezeti alkalmazás profilozása. Mindkét profilkészítési művelet környezeti változókkal engedélyezve van. Mivel a Windows-szolgáltatás az operációs rendszer indításakor indul el, a jelen témakörben korábban tárgyalt környezeti változóknak már jelen kell lenniük, és a rendszer indítása előtt meg kell adni a szükséges értékeket. Emellett a profilkészítési DLL-t már regisztrálni kell a rendszeren.

Miután beállította a COR_ENABLE_PROFILING és COR_PROFILER környezeti változókat, és regisztrálta a profilkészítő DLL-t, újra kell indítania a célszámítógépet, hogy a Windows szolgáltatás észlelhesse ezeket a módosításokat.

Vegye figyelembe, hogy ezek a módosítások rendszerszintű profilkészítést tesznek lehetővé. A célszámítógép újraindítása után törölnie kell a rendszerkörnyezet változóit annak érdekében, hogy megakadályozza az összes olyan felügyelt alkalmazást, amely később fut.

Ez a technika azt is eredményezi, hogy minden CLR-folyamat profilt kap. A profilozónak logikát kell hozzáadnia az ICorProfilerCallbackhez::A visszahívás inicializálása annak észleléséhez, hogy az aktuális folyamat érdekes-e. Ha nem, a profilkészítő az inicializálás végrehajtása nélkül is meghiúsulhatja a visszahívást.

Lásd még