c# - 扫描 Windows 进程列表的最有效方法?

标签 c# java windows process tasklist

所以我目前正在从事一个项目,该项目需要在某些进程运行时计时。我试图找出扫描进程列表的最有效方法,然后根据支持的程序列表检查进程列表可执行文件名称。

本质上问题有两部分:

1) 从进程列表中获取进程可执行名称的最有效方法

2) 将此列表与另一个列表进行比较的最有效方法

对于 (1),其他开发人员之一正在尝试使用 tasklist 命令并解析出可执行文件的名称。我还发现 C# 有一个 System.Diagnostic 进程列表,可以自动执行此操作。我们仍在尝试在 Java 和 C# 之间做出决定,因此我可能会倾向于语言中立的解决方案,但这可能是 C# 的决定性因素。

对于 (2),支持的进程列表可能平均较小(1-10 个进程名称)。我们可以通过列表运行每个进程,但我们认为这对于旧 PC 来说可能太多了,所以我们考虑在应用程序启动时使用包含初始进程列表的按字母顺序排列的平衡 AVL 树,并检查所有内容首先反对它,然后检查我们支持的进程名称列表,如果它不在树中。

非常感谢任何建议。

编辑:显然您可以按进程可执行文件名称过滤任务列表,因此我们可以只对受支持进程列表中的每个进程执行此操作。

编辑 2:是否有适用于 Windows XP Home 的等效任务列表?

最佳答案

如果您使用任务列表,实际上只运行一次命令并获取所有结果可能会更快,而不是为每个可执行文件名称运行它。执行进程和获取输出有一些开销。 (当你返回结果时,你将不得不在代码中循环遍历它们,但这可能会更快。通常不会有超过 100 个进程同时运行,所以它不会太糟糕。)你应该编写测试并检查是否属实。

在 C# 中,Process.GetProcesses() 是最好的方法。

在 Java 中,并没有真正等效的类/方法。获取进程列表是特定于操作系统的,因此 Java 设计者必须决定不将此功能集成/抽象到基本 Java 类中。您可能需要运行 Runtime.getRuntime().exec("tasklist.exe") 才能在 Windows 上获得结果,或者在 Unix/Linux 上运行 exec("ps")。

关于c# - 扫描 Windows 进程列表的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/766694/

相关文章:

c# - MonoDevelop、linux、Ubuntu 18.04 Mint、ConsoleApplication 控制台不弹出

c# - IList.Contains(string[]) 如何在 C# 中?

java - Windows 上用于 SVN Java 绑定(bind) (JavaHL) 的配对 JAR 和 native 库二进制文件?

c# - 是什么将 IsFaulted 设置为 false?

c# - Azure WebJob 未写入输出

java - 对于没有字段的类,equals() 的合适实现是什么?

java - 了解给定代码的代码执行路径

java - Mysema QueryDSL 如何使用 "like"?

ruby - 安装 gem 时出现权限被拒绝的错误

c++ - 是否可以使用 IDiaDataSource::LoadDataFromPdb 从符号存储中读取 pdb?