c#进程。模块非常慢
我的代码从每个正在运行的进程中提取所有已加载模块的名称,我的方法如下 这是我的密码:c#进程。模块非常慢,c#,performance,process,module,C#,Performance,Process,Module,我的代码从每个正在运行的进程中提取所有已加载模块的名称,我的方法如下 这是我的密码: Process[] procs = Process.GetProcesses(); foreach (Process p in procs) { foreach (ProcessModule item in p.Modules) { Console.WriteLine(item.FileName); } } 由
Process[] procs = Process.GetProcesses();
foreach (Process p in procs)
{
foreach (ProcessModule item in p.Modules)
{
Console.WriteLine(item.FileName);
}
}
由于某些原因,这种方法的性能非常低:(
是否有其他方法或不同的方法来获取所有这些模块的名称
任何其他运行速度比这更快的解决方案都非常好
TIA您可以尝试添加一些并行化以加快速度:
Parallel.ForEach(Process.GetProcesses(),
process =>
{
foreach (ProcessModule m in process.Modules)
{
Console.WriteLine(m.FileName);
}
});
“非常低的性能”有多低?在我的系统上,此代码是可以接受的fast@PhilipPittle39个进程中仅2097个模块的731毫秒是
tasklist/M
快多了?@rene实现了什么?@Eli你确定这没有什么区别吗?我试过了,@Eli-你在一台有多个cpu核的机器上吗?@测量正确否w它看起来一点也不稳定。我会像你一样尝试平均50个…@PhilipPittle No.好的commant-似乎是并行不能提高性能的原因。无论如何,我正在开发一个虚拟机箱,我会用更多的内核测试它-但是,它仍然非常慢mechanism@Eli-是的,收集生产任务单的过程相当缓慢来自所有进程的DULE。除了向操作系统请求之外,没有其他方法可以获取此信息。操作系统不会“缓存”此信息,因此它必须从每个正在运行的进程中获取此信息。操作系统站点缓存此信息没有多大好处,因此不保证内存开销。这就是原因,正如ren所说e
指出,即使是任务列表/M也相对较慢。