VB.NET优化方案:判断两个进程是否至少一个在运行
优化进程检测代码:更快、更低资源占用
嘿,你的需求很明确——只要判断process1或process2中至少一个在运行就行,不用管具体是哪个。原代码的问题在于两次调用Process.GetProcessesByName,每次调用都会遍历一遍系统中所有的进程,相当于做了两次重复的遍历操作,这会额外消耗资源、拖慢执行速度。
下面给你两种更高效的实现方案,按优先级推荐:
方案1:单次遍历所有进程(最优)
只调用一次Process.GetProcesses()获取全部进程,然后在一次遍历中检查是否有目标进程。这样能把系统遍历的次数从两次降到一次,资源占用和执行速度都会更好:
' 若项目未自动引用,需添加此引用 Imports System.Linq Dim isRunning As Boolean = Process.GetProcesses().Any(Function(p) Return p.ProcessName.Equals("process1", StringComparison.OrdinalIgnoreCase) OrElse p.ProcessName.Equals("process2", StringComparison.OrdinalIgnoreCase) End Function)
为什么更优?
- 仅遍历系统进程一次,避免了重复遍历的开销;
- 用
StringComparison.OrdinalIgnoreCase做大小写不敏感匹配,适配不同系统下的进程名大小写差异; - 一旦找到匹配的进程,
Any()会立即停止遍历,不用检查剩余进程,进一步提升效率。
方案2:简化的两次调用(代码更简洁,效率略逊于方案1)
如果你觉得方案1的LINQ写法有点复杂,也可以用更简洁的方式,但本质还是两次调用GetProcessesByName,不过代码更短:
Imports System.Linq Dim isRunning As Boolean = Process.GetProcessesByName("process1").Any() OrElse Process.GetProcessesByName("process2").Any()
注意事项
ProcessName是进程的名称(不带.exe后缀),确保你传入的process1/process2是正确的进程名;- 如果你的项目是.NET Framework,需要确保已经引用了
System.Core程序集才能使用LINQ的Any()方法。
内容的提问来源于stack exchange,提问作者Dimitri




