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 určí, jestli se má proces připojit k profileru:

  • COR_ENABLE_PROFILING: MODUL 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, modul CLR se připojí k profileru, který má tento IDENTIFIKÁTOR CLSID nebo ProgID, který musí být uložen dříve v registru. Proměnná prostředí COR_PROFILER je definována 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 COR_ENABLE_PROFILING a COR_PROFILER proměnných prostředí. Musíte také zajistit, aby byla knihovna DLL profileru zaregistrovaná.

Poznámka:

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

Poznámka:

Chcete-li používat profilátory rozhraní .NET Framework verze 2.0, 3.0 a 3.5 v rozhraní .NET Framework 4 a novějších verzích, je nutné nastavit proměnnou prostředí COMPLUS_ProfAPI_ProfilerCompatibilitySetting.

Rozsah proměnné prostředí

Jak nastavíte COR_ENABLE_PROFILING a COR_PROFILER proměnné 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ě používáte. (Budou se také vztahovat na jiné 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ěny z daného okna.

  • Pokud nastavíte proměnné na úrovni uživatele, použijí se pro všechny aplikace, které spustíte v Průzkumníku souborů. Okno příkazového řádku, které otevřete po nastavení proměnných, bude mít tato nastavení prostředí, a tak i všechny aplikace, které spustíte z tohoto okna. Chcete-li nastavit proměnné prostředí na úrovni uživatele, klepněte pravým tlačítkem myši na položku Můj počítač, klepněte na příkaz Vlastnosti, klepněte na kartu Upřesnit , klepněte na položku Proměnné prostředí a přidejte proměnné do seznamu Proměnných uživatele .

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

Pokud profilujete službu systému Windows, musíte po nastavení proměnných prostředí restartovat počítač a zaregistrovat knihovnu DLL profileru. 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.

  • V daném prostředí může proces profilovat pouze jeden profiler najednou. V různýchprostředích 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 profilovaný. 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ávkovat výsledky a budou je informovat o centrálním počítači pro shromažďování dat.

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

Inicializace profileru

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

HRESULT Initialize(IUnknown *pICorProfilerInfoUnk)

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

Nastavení oznámení událostí

Profiler pak zavolá ICorProfilerInfo::SetEventMask metoda určit, které kategorie oznámení je zájem. Pokud je například profiler zájem pouze o funkci zadat a nechat oznámení a oznámení 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 pomáhá uživateli vytvořit jednoduchý nebo speciální profiler. Zkracuje také dobu procesoru, která by se ztrácela odesíláním oznámení, že profiler by jen ignoroval.

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

Profilace služby systému Windows

Profilace služby Systému 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, musí být proměnné prostředí popsané dříve v tomto tématu již přítomny a nastaveny na požadované hodnoty před spuštěním systému. Kromě toho musí být knihovna DLL profilace již zaregistrována v systému.

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.

Mějte na paměti, že tyto změny umožní profilaci na úrovni celého systému. Pokud chcete zabránit profilování všech spravovaných aplikací, 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 ke každému profilovanému procesu CLR. Profiler by měl přidat logiku do své ICorProfilerCallback::Initialize zpětné volání zjistit, zda je aktuální proces zájem. Pokud tomu tak není, profiler může navrácení volání selhat bez provedení inicializace.

Viz také