You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VB.NET优化方案:判断两个进程是否至少一个在运行

优化进程检测代码:更快、更低资源占用

嘿,你的需求很明确——只要判断process1process2中至少一个在运行就行,不用管具体是哪个。原代码的问题在于两次调用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

火山引擎 最新活动