从C#中的进程id中获取进程名称的最快方法是什么
本文关键字:方法 是什么 获取 进程 id 进程名 | 更新日期: 2023-09-27 18:20:08
我有C#中一堆正在运行的程序的Windows进程ID(PID
),我需要知道进程名称(例如chrome
)以供信息显示。
我目前使用的方法是:
string processName;
using(var process = Process.GetProcessById(pid))
{
processName = process.ProcessName; // THIS is costly
}
事实证明,这是我诊断中速度最慢、占用内存最多的功能之一(根据Visual Studio性能和诊断)。例如,70个调用需要12.8MB的内存。这是我的应用程序所需总内存的一半。
从C#中获取进程名称(或有用的进程描述)的替代(更快)方法是什么?
注意:代码应该在没有管理员权限的情况下运行
此类是为此目的而设计的,因此,如果您对它提供的内容不满意,在启动应用程序时,您可以生成一个缓存,一个运行进程的简单映射,为自己提供一个快速访问源。对于稍后启动或停止的进程-监控适当的事件并相应地刷新映射,例如使用WMI:
private IDictionary<int, string> _map;
private ManagementEventWatcher _watcher;
_watcher = new ManagementEventWatcher("SELECT ProcessID, ProcessName FROM Win32_ProcessStartTrace");
_watcher.EventArrived += ProcessStarted;
_watcher.Start();
private void ProcessStarted(object sender, EventArrivedEventArgs e)
{
// add proc to _map
}