【问题标题】:How to get the current ProcessID?如何获取当前的 ProcessID?
【发布时间】:2011-03-01 13:04:40
【问题描述】:

使用 .NET Framework 从您自己的应用程序中获取当前进程 ID 的最简单方法是什么?

【问题讨论】:

  • 是的。我想这里出了点问题:D @VictorYarema

标签: .net process


【解决方案1】:

获取当前进程的引用并使用System.DiagnosticsProcess.Id属性:

int nProcessID = Process.GetCurrentProcess().Id;

【讨论】:

  • 使用 System.Diagnostics;或 System.Diagnostics.Process.GetCurrentProcess().Id;我总是保护自己,并假设当前或未来的政策规则会在某些锁定或限制模式下限制此调用,因为它会访问流程区域。
【解决方案2】:
Process.GetCurrentProcess().Id

或者,由于 Process 类是 IDisposable,并且进程 ID 在您的应用程序运行时不会更改,您可以拥有一个具有静态属性的帮助类:

public static int ProcessId
{
    get 
    {
        if (_processId == null)
        {
            using(var thisProcess = System.Diagnostics.Process.GetCurrentProcess())
            {
                _processId = thisProcess.Id;
            }
        }
        return _processId.Value;
    }
}
private static int? _processId;

【讨论】:

    【解决方案3】:

    即将推出的 .NET 5 引入了 Environment.ProcessId,应该优先于 Process.GetCurrentProcess().Id,因为它避免了分配和释放 Process 对象的需要。

    https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/ 显示了一个基准,其中Environment.ProcessId 只需要 3ns 而不是 Process.GetCurrentProcess().Id 的 68ns。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-19
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2015-12-25
      • 2019-04-22
      相关资源
      最近更新 更多