Performans Sayaçları ve Devam Eden Yan Yana Uygulamalar
Not
Bu makale .NET Framework'e özgüdür. .NET 6 ve sonraki sürümleri de dahil olmak üzere daha yeni .NET uygulamaları için geçerli değildir.
Performans İzleyicisi (Perfmon.exe) kullanarak performans sayaçlarını çalışma zamanı temelinde ayırt etmek mümkündür. Bu konu başlığında, bu işlevselliği etkinleştirmek için gereken kayıt defteri değişikliği açıklanmaktadır.
Varsayılan Davranış
Varsayılan olarak, Performans İzleyicisi performans sayaçlarını uygulama bazında görüntüler. Ancak, bunun sorunlu olduğu iki senaryo vardır:
Aynı ada sahip iki uygulamayı izlediğiniz zaman. Örneğin, her iki uygulama da myapp.exe olarak adlandırılırsa, örnek sütununda biri myapp, diğeri myapp#1 olarak görüntülenir. Bu durumda, bir performans sayacını belirli bir uygulamayla eşleştirmek zordur. Myapp#1 için toplanan verilerin ilk myapp.exe mi yoksa ikinci myapp.exe mi başvurduğu net değildir.
Bir uygulama ortak dil çalışma zamanının birden çok örneğini kullandığında. .NET Framework 4, işlem içi yan yana barındırma senaryolarını destekler; diğer bir ifadeyle, tek bir işlem veya uygulama ortak dil çalışma zamanının birden çok örneğini yükleyebilir. myapp.exe adlı tek bir uygulama iki çalışma zamanı örneği yüklerse, bunlar varsayılan olarak Örnek sütununda myapp ve myapp#1 olarak atanır. Bu durumda, myapp ve myapp#1'in aynı ada sahip iki uygulamaya mı yoksa iki çalışma zamanıyla aynı uygulamaya mı başvuracakları net değildir. Aynı ada sahip birden çok uygulama birden çok çalışma zamanı yüklerse belirsizlik daha da artar.
Bu belirsizliği ortadan kaldırmak için bir kayıt defteri anahtarı ayarlayabilirsiniz. .NET Framework 4 kullanılarak geliştirilen uygulamalar için bu kayıt defteri değişikliği, Örnek sütunundaki uygulama adına bir işlem tanımlayıcısı ve ardından bir çalışma zamanı örneği tanımlayıcısı ekler. Uygulama veya uygulama#1 yerine, uygulama artık Örnek sütununda application_p
processID_r
runtimeID olarak tanımlanır. Bir uygulama ortak dil çalışma zamanının önceki bir sürümü kullanılarak geliştirilmişse, .NET Framework 4'ün yüklü olması koşuluyla bu örnek application_p
processID olarak temsil edilir.
İşlem İçi Yan Yana Uygulamalar için Performans Sayaçları
Tek bir uygulamada barındırılan birden çok ortak dil çalışma zamanı sürümünün performans sayaçlarını işlemek için, aşağıdaki tabloda gösterildiği gibi tek bir kayıt defteri anahtarı ayarını değiştirmeniz gerekir.
Değer | |
---|---|
Anahtar | Hkey_local_machıne\system\currentcontrolset\services\. NETFramework\Performance |
Girdi | ProcessNameFormat |
Tür | REG_DWORD |
Value | 2 (0x00000002) |
için ProcessNameFormat
0 değeri, varsayılan davranışın etkin olduğunu gösterir; yani Perfmon.exe performans sayaçlarını uygulama başına temel olarak görüntüler. Bu değeri 2 olarak ayarladığınızda, Perfmon.exe bir uygulamanın birden çok sürümünü ayırır ve çalışma zamanı başına performans sayaçları sağlar. Kayıt defteri anahtarı ayarı için ProcessNameFormat
diğer tüm değerler desteklenmez ve gelecekte kullanılmak üzere ayrılmıştır.
Kayıt defteri anahtarı ayarını güncelleştirdikten sonra, yeni örnek adlandırma özelliğinin ProcessNameFormat
düzgün çalışması için Perfmon.exe veya performans sayaçlarının diğer tüketicilerini yeniden başlatmanız gerekir.
Aşağıdaki örnekte, değerin program aracılığıyla nasıl değiştireceği ProcessNameFormat
gösterilmektedir.
// 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()
Bu kayıt defteri değişikliğini yaptığınızda ve .NET Framework 4 veya üzeri yüklüyse, Perfmon.exe uygulamaların adlarını application_p
processID olarak görüntüler; burada uygulama uygulamanın adıdır ve processID uygulamanın işlem tanımlayıcısıdır. Örneğin, myapp.exe adlı bir uygulama ortak dil çalışma zamanının iki örneğini yüklerse, Perfmon.exe bir örneği myapp_1416, ikinci örneği de myapp_3160 olarak tanımlayabilir.
Not
İşlem tanımlayıcısı, çalışma zamanının önceki sürümlerini kullanan aynı ada sahip iki uygulamayı çözümleme belirsizliğini ortadan kaldırır. Ortak dil çalışma zamanının önceki sürümleri yan yana senaryoları desteklemediğinden, önceki sürümler için çalışma zamanı tanımlayıcısı gerekli değildir.
.NET Framework 4 veya sonraki bir sürüm yoksa veya kaldırılmışsa, kayıt defteri anahtarını ayarlamanın hiçbir etkisi yoktur. Bu, aynı ada sahip iki uygulamanın Perfmon.exe uygulama ve uygulama#1 olarak görünmeye devam edeceği anlamına gelir (örneğin, uygulamam ve uygulamam#1 gibi).