Sdílet prostřednictvím


Nastavení prostředí profilace

Poznámka

V rozhraní .NET Framework 4 došlo k podstatným změnám profilace.

Když se spustí spravovaný proces (aplikace nebo služba), načte modul CLR (Common Language Runtime). Při inicializaci modulu CLR vyhodnotí následující dvě proměnné prostředí a rozhodne, jestli se má proces připojit k profileru:

  • COR_ENABLE_PROFILING: CLR se připojí k profileru pouze v případě, že tato proměnná prostředí existuje a je nastavená na hodnotu 1.

  • COR_PROFILER: Pokud kontrola COR_ENABLE_PROFILING projde, clR se připojí k profileru, který má toto ID CLSID nebo ProgID, které musí být dříve uložené v registru. Proměnná prostředí COR_PROFILER je definovaná jako řetězec, jak je znázorněno v následujících dvou příkladech.

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

Pokud chcete profilovat aplikaci CLR, musíte před spuštěním aplikace nastavit proměnné prostředí COR_ENABLE_PROFILING a COR_PROFILER. Musíte se také ujistit, že je zaregistrována knihovna DLL profileru.

Poznámka

Počínaje rozhraním .NET Framework 4 nemusí být profilátory registrovány.

Poznámka

Chcete-li používat .NET Framework verze 2.0, 3.0 a 3.5 profilery v rozhraní .NET Framework 4 a novějších verzích, musíte nastavit proměnnou prostředí COMPLUS_ProfAPI_ProfilerCompatibilitySetting.

Rozsah proměnné prostředí

Způsob nastavení COR_ENABLE_PROFILING a COR_PROFILER proměnných prostředí určí jejich rozsah vlivu. Tyto proměnné můžete nastavit jedním z následujících způsobů:

  • Pokud nastavíte proměnné ve volání ICorDebug::CreateProcess , budou platit pouze pro aplikaci, kterou právě spouštíte. (Budou platit také pro další aplikace spuštěné danou aplikací, které dědí prostředí.)

  • Pokud nastavíte proměnné v okně příkazového řádku, budou platit pro všechny aplikace, které jsou spuštěné z daného okna.

  • Pokud nastavíte proměnné na úrovni uživatele, budou platit pro všechny aplikace, které začínáte Průzkumník souborů. Okno příkazového řádku, které otevřete po nastavení proměnných, bude mít tato nastavení prostředí a stejně tak i všechny aplikace, které spustíte z tohoto okna. Pokud chcete nastavit proměnné prostředí na úrovni uživatele, klikněte pravým tlačítkem na Tento počítač, klikněte na Vlastnosti, klikněte na kartu Upřesnit , klikněte na Proměnné prostředí a přidejte proměnné do seznamu Uživatelské proměnné .

  • Pokud nastavíte proměnné na úrovni počítače, budou platit pro všechny aplikace, které jsou na tomto počítači spuštěné. Okno příkazového řádku, které otevřete na tomto počítači, bude mít tato nastavení prostředí a stejně tak i všechny aplikace, které z tohoto okna spustíte. To znamená, že každý spravovaný proces na tomto počítači začne profilerem. Pokud chcete nastavit proměnné prostředí na úrovni počítače, klikněte pravým tlačítkem myši na Tento počítač, klikněte na Vlastnosti, klikněte na kartu Upřesnit , klikněte na Proměnné prostředí, přidejte proměnné do seznamu Systémové proměnné a restartujte počítač. Po restartování budou proměnné dostupné pro celý systém.

Pokud profilujete službu systému Windows, musíte po nastavení proměnných prostředí a registraci knihovny DLL profileru restartovat počítač. Další informace o těchto aspektech najdete v části Profilace služby Systému Windows.

Další důležité informace

  • Profiler třída implementuje ICorProfilerCallback a ICorProfilerCallback2 rozhraní. V rozhraní .NET Framework verze 2.0 musí profiler implementovat ICorProfilerCallback2. Pokud ne, ICorProfilerCallback2 nenačte se.

  • Pouze jeden profiler může profilovat proces najednou v daném prostředí. V různých prostředích můžete zaregistrovat dva různé profilátory, ale každý z nich musí profilovat samostatné procesy. Profiler musí být implementován jako knihovna DLL serveru COM v procesu, která je mapována do stejného adresního prostoru jako proces, který je profilován. To znamená, že profiler běží v procesu. Rozhraní .NET Framework nepodporuje žádný jiný typ serveru COM. Pokud například profiler chce monitorovat aplikace ze vzdáleného počítače, musí na každém počítači implementovat agenty kolektoru. Tito agenti budou dávkové výsledky a předávat je počítači centrálního shromažďování dat.

  • Vzhledem k tomu, že profiler je objekt com, který je vytvořena instance v procesu, každá profilovaná aplikace bude mít vlastní kopii profileru. Proto jedna instance profileru nemusí zpracovávat data z více aplikací. Budete ale muset přidat logiku do kódu protokolování profileru, aby se zabránilo přepsání souboru protokolu z jiných profilovaných aplikací.

Inicializace profileru

Když projdou obě kontroly proměnných prostředí, CLR vytvoří instanci profileru podobným způsobem jako funkce MODELU COM CoCreateInstance . Profiler není načten přímým voláním .CoCreateInstance Proto se vyhnete volání CoInitialize, které vyžaduje nastavení modelu vláken. CLR pak zavolá metodu ICorProfilerCallback::Initialize v profileru. Podpis této metody je následující.

HRESULT Initialize(IUnknown *pICorProfilerInfoUnk)  

Profiler se musí dotazovat pICorProfilerInfoUnk na ukazatel rozhraní ICorProfilerInfo nebo ICorProfilerInfo2 a uložit ho, aby si mohl vyžádat další informace později během profilace.

Nastavení oznámení událostí

Profiler pak zavolá metodu ICorProfilerInfo::SetEventMask a určí kategorie oznámení, které ho zajímají. Pokud například profiler zajímá jenom funkce , zadejte a zanechejte oznámení a oznámení o uvolňování paměti, určuje následující:

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

Nastavením masky oznámení tímto způsobem může profiler omezit, která oznámení obdrží. Tento přístup uživateli pomůže vytvořit jednoduchý profiler nebo profiler pro speciální účely. Také zkracuje čas procesoru, který by bylo zbytečné odesílání oznámení, která profiler jednoduše ignoruje.

Některé události profileru jsou neměnné. To znamená, že jakmile jsou tyto události nastaveny ve zpětném ICorProfilerCallback::Initialize volání, nelze je vypnout a nové události nelze zapnout. Pokusy o změnu neměnné události budou mít za ICorProfilerInfo::SetEventMask následek vrácení neúspěšné hodnoty HRESULT.

Profilace služby Windows

Profilace služby Windows se podobá profilaci aplikace Common Language Runtime. Obě operace profilace jsou povoleny prostřednictvím proměnných prostředí. Vzhledem k tomu, že služba systému Windows je spuštěna při spuštění operačního systému, proměnné prostředí popsané dříve v tomto tématu již musí být přítomny a musí být před spuštěním systému nastaveny na požadované hodnoty. Kromě toho profilovací knihovna DLL již musí být v systému zaregistrována.

Po nastavení COR_ENABLE_PROFILING a COR_PROFILER proměnných prostředí a registraci knihovny DLL profileru byste měli restartovat cílový počítač, aby služba systému Windows tyto změny zjistila.

Všimněte si, že tyto změny umožní profilaci v rámci celého systému. Pokud chcete zabránit profilování každé spravované aplikace, která se následně spustí, měli byste po restartování cílového počítače odstranit proměnné systémového prostředí.

Tato technika také vede k profilování každého procesu CLR. Profiler by měl do zpětného volání ICorProfilerCallback::Initialize přidat logiku, aby zjistil, zda je aktuální proces zajímavý. Pokud není, profiler může selhat zpětné volání bez provedení inicializace.

Viz také