Aracılığıyla paylaş


CA1839: Process.GetCurrentProcess() yerine Environment.ProcessPath kullanın. MainModule.FileName

Özellik Değer
Kural Kimliği CA1839
Başlık Process.GetCurrentProcess() yerine Environment.ProcessPath kullanın. MainModule.FileName
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

yerine işlemi Environment.ProcessPathbaşlatan dosyanın yolunu almak için kullanınProcess.GetCurrentProcess().MainModule.FileName.

Kural açıklaması

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName pahalıdır:

  • Genellikle yalnızca almak FileNameiçin bir Process ve ProcessModule örneği ayırır.
  • Örneğin Process atılması gerekir ve bu da performansı etkiler.
  • Örnekte aramayı Dispose()Process unutmak kolaydır.
  • Örneği başka hiçbir şey FileName kullanmıyorsa Process , başvuruda bulunılan türlerin grafiğini artırarak bağlantılı boyut gereksiz yere büyür.
  • Bu API'yi bulmak veya bulmak biraz zordur.

System.Environment.ProcessPath tüm bu dezavantajları önler ve aynı bilgileri üretir.

Dekont

System.Environment.ProcessPath .NET 6'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()
    {
        string path = Process.GetCurrentProcess().MainModule.FileName; // Violation occurs
    }
}
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim path As String = Process.GetCurrentProcess().MainModule.FileName ' Violation occurs.
    End Function
End Class
using System.Diagnostics;

class MyClass
{
    void MyMethod()
    {
        string path = System.Environment.ProcessPath; // Violation fixed
    }
}
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim path As String = System.Environment.ProcessPath ' Violation fixed.
    End Function
End Class

Bahşiş

Visual Studio'da bu kural için bir kod düzeltmesi kullanılabilir. Bunu kullanmak için imleci ihlalin üzerine getirin ve Ctrl+ tuşuna (nokta) basın. Sunulan seçenekler listesinden 'Environment.ProcessPath' kullan'ı seçin.

Code fix for CA1839 - Use 'Environment.ProcessPath'

Uyarıların ne zaman bastırılması gerekiyor?

Gereksiz ayırma ve ve ProcessModule örneklerinin nihai elden çıkarılmasından kaynaklanan performans etkisi konusunda endişeniz yoksa, bu kuralın ihlalini Process bastırmak 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 CA1839
// The code that's violating the rule is on this line.
#pragma warning restore CA1839

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.CA1839.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Ayrıca bkz.