Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Замечание
Эта статья связана с .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
С помощью монитора производительности (Perfmon.exe) можно дифференцировать счетчики производительности в зависимости от среды выполнения. В этом разделе описывается изменение реестра, необходимое для включения этой функции.
Поведение по умолчанию
По умолчанию монитор производительности отображает счетчики производительности на основе каждого приложения. Однако существует два сценария, в которых это проблематично.
При мониторинге двух приложений с одинаковым именем. Например, если оба приложения называются myapp.exe, одно будет отображаться как myapp, а другое как myapp#1 в столбце Instance. В этом случае сложно сопоставить счетчик производительности с определенным приложением. Неясно, относятся ли данные, собранные для myapp#1 , к первой myapp.exe или второй myapp.exe.
Когда приложение использует несколько экземпляров общей среды выполнения. Платформа .NET Framework 4 поддерживает сценари� внутрипроцессного размещения; то есть один процесс или приложение может загружать несколько экземпляров общеязыковой среды CLR. Если одно приложение с именем myapp.exe загружает два экземпляра среды выполнения, по умолчанию они будут назначены в столбце "Экземпляр " в качестве myapp и myapp#1. В этом случае неясно, относится ли myapp и myapp#1 к двум приложениям с одинаковым именем или к одному приложению с двумя средами выполнения. Если несколько приложений с одинаковым именем загружают несколько сред выполнения, неоднозначность еще больше.
Чтобы устранить эту неоднозначность, можно задать ключ реестра. Для приложений, разработанных с помощью .NET Framework 4, это изменение реестра добавляет идентификатор процесса, за которым следует идентификатор экземпляра среды выполнения, в столбец Экземпляр имени приложения. Вместо приложения или приложения#1 приложение теперь определяется как application_pprocessID_rruntimeID в столбце Instance. Если приложение было разработано с помощью предыдущей версии среды CLR, этот экземпляр представлен как application_pprocessID , если установлен .NET Framework 4.
Счетчики производительности для параллельных приложений In-Process
Чтобы обрабатывать счетчики производительности для нескольких версий общей среды выполнения, размещенных в одном приложении, необходимо изменить настройку одного ключа в реестре, как показано в следующей таблице.
| Ценность | |
|---|---|
| Ключ | HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance |
| запись | ProcessNameFormat |
| Тип | REG_DWORD |
| Ценность | 2 (0x00000002) |
Значение 0 для ProcessNameFormat указывает, что поведение по умолчанию включено; то есть Perfmon.exe отображает счетчики производительности отдельно для каждого приложения. Если задать этому значению значение 2, Perfmon.exe устраняет неоднозначность между несколькими версиями приложения и предоставляет счетчики производительности для каждой среды выполнения. Любое другое значение параметра ProcessNameFormat раздела реестра не поддерживается и зарезервировано для дальнейшего использования.
После обновления ProcessNameFormat параметра раздела реестра необходимо перезапустить Perfmon.exe или любых других потребителей счетчиков производительности, чтобы новая функция именования экземпляров работала правильно.
В следующем примере показано, как программно изменить ProcessNameFormat значение.
// Create or open registry key.
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(
@"System\CurrentControlSet\Services\.NETFramework\Performance");
// Create or overwrite value.
key.SetValue("ProcessNameFormat", 1,
Microsoft.Win32.RegistryValueKind.DWord);
key.Close();
' Create or open registry key.
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey( _
"System\CurrentControlSet\Services\.NETFramework\Performance")
' Create or overwrite value.
key.SetValue("ProcessNameFormat", 1, _
Microsoft.Win32.RegistryValueKind.DWord)
key.Close()
При изменении этого реестра и при установке .NET Framework 4 или более поздней версии Perfmon.exe отображает имена приложений как application_pprocessID, где приложение — имя приложения, а идентификатор процесса — идентификатор процесса приложения. Например, если приложение с именем myapp.exe загружает два экземпляра среды CLR, Perfmon.exe может определить один экземпляр как myapp_1416 и второй как myapp_3160.
Замечание
Идентификатор процесса устраняет неоднозначность разрешения двух приложений с одинаковым именем, использующее более ранние версии среды выполнения. Идентификатор среды выполнения не требуется для предыдущих версий, так как предыдущие версии среды CLR не поддерживают параллельные сценарии.
Если .NET Framework 4 или более поздняя версия отсутствует или была удалена, изменение ключа реестра не окажет никакого эффекта. Это означает, что два приложения с одинаковым именем будут отображаться в Perfmon.exe как приложение и приложение#1 (например, myapp и myapp#1).