Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA1837 |
| Başlık | Process.GetCurrentProcess().Id yerine, Environment.ProcessId kullanın. |
| Kategori | Performans |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Öneri olarak |
| Geçerli diller | C# ve Visual Basic |
Neden
Bu kural, System.Diagnostics.Process.GetCurrentProcess().Id çağrılarını bulur ve yerine System.Environment.ProcessId kullanılmasını önerir çünkü System.Environment.ProcessId daha verimlidir.
Kural açıklaması
System.Diagnostics.Process.GetCurrentProcess().Id pahalıdır:
- Genellikle yalnızca
Idalmak için bir Process örneği ayırır. - Örneğin Process bertaraf edilmesi gerekir ve bunun performans üzerinde bir etkisi vardır.
- Process örneğinde Dispose() çağrısını yapmayı unutmak kolaydır.
- Eğer
Iddışında hiç kimseProcessörneğini kullanmıyorsa, başvurulan türlerin grafiği arttığı için bağlantılı boyut gereksiz yere büyür. - Bu API'yi keşfetmek veya bulmak biraz zordur.
System.Environment.ProcessId yukarıdakilerin tümünü önler.
Not
KURAL CA1837 .NET 5.0'dan itibaren kullanılabilir.
İhlalleri düzeltme
İhlal el ile düzeltilebilir veya bazı durumlarda Visual Studio'da kodu düzeltmek için Hızlı Eylemler kullanılabilir.
Aşağıdaki iki kod parçacığı kuralın ihlalini ve nasıl düzeltileceğini gösterir:
using System.Diagnostics;
class MyClass
{
void MyMethod()
{
int pid = Process.GetCurrentProcess().Id;
}
}
Imports System.Diagnostics
Class MyClass
Private Sub MyMethod()
Dim pid As Integer = Process.GetCurrentProcess().Id
End Function
End Class
using System.Diagnostics;
class MyClass
{
void MyMethod()
{
int pid = System.Environment.ProcessId;
}
}
Imports System.Diagnostics
Class MyClass
Private Sub MyMethod()
Dim pid As Integer = System.Environment.ProcessId
End Function
End Class
İpucu
Visual Studio'da bu kural için bir kod düzeltmesi kullanılabilir. Bunu kullanmak için imleci ihlalin üzerine getirin ve Ctrl+. (nokta) tuşuna basın. 'Process.GetCurrentProcess().Id' yerine 'Environment.ProcessId' kullan 'ı sunulan seçenekler listesinden seçin.
Uyarıların ne zaman bastırılması gerekiyor?
Gereksiz veri ayırma ve sonunda bir Process örneğinin elden çıkarılması nedeniyle oluşabilecek performans etkisi konusunda endişeleriniz yoksa, bu kuralın ihlalini görmezden gelmek güvenlidir.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA1837
// The code that's violating the rule is on this line.
#pragma warning restore CA1837
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1837.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.