You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Selenium ChromeDriver内存泄漏问题求助

C#环境下Selenium ChromeDriver内存未正常释放问题求助

我在C#环境中使用Selenium ChromeDriver时遇到内存无法正常释放的问题,特寻求技术帮助。通过RamMap工具监测内存使用情况发现:不运行相关脚本时,内存不会持续增长;但通过任务计划程序运行脚本后,RamMap中的「Unused-Active」条目内存每次运行都会增加。

已确认资源监视器、任务管理器及RamMap中均无活跃的chromedriver或Chrome进程,当前使用版本信息:

  • Selenium.WebDriver v4.23.0
  • Chrome及ChromeDriver v127

RamMap截图显示,运行脚本约5分钟后「Unused-Active」条目内存显著上升,不运行脚本时该数值无增长。该数值在5分钟内从7000KB升至50000KB;按此趋势,24小时将增加近12384000KB(约12GB),运行一周后机器内存占用率将超过80%,均为未使用但仍标记为「Active」的内存,已引发严重性能问题。

各阶段RamMap监测截图

  • 脚本运行前(重启后):数值无增长
    脚本运行前(重启后)
  • 10分钟停机(无脚本运行)
    10分钟停机(无脚本运行)
  • 15个计划任务每分钟启动一次控制台应用,持续5分钟:数值显著上升
    15个计划任务运行5分钟后
  • 10分钟停机(停止运行脚本)
    停止脚本后10分钟停机

已尝试的可复现代码

以下代码均为C#控制台应用,通过任务计划程序配置为每分钟运行一次,共15次:

示例1:使用using语句+Close+Quit

using OpenQA.Selenium.Chrome;
namespace ChromeBotTest
{
    public class Program
    {
        private static async Task Main(string[] args)
        {
            using (ChromeDriver? chromeDriver = new()) //using语句自动释放资源
            {
                await Task.Delay(3000); //等待Chrome启动
                chromeDriver.Close(); //关闭所有窗口
                chromeDriver.Quit(); //完全退出浏览器并释放资源
            }
        }
    }
}

示例2:使用using语句+Quit

using OpenQA.Selenium.Chrome;
namespace ChromeBotTest
{
    public class Program
    {
        private static async Task Main(string[] args)
        {
            using (ChromeDriver? chromeDriver = new()) //using语句自动释放资源
            {
                await Task.Delay(3000); //等待Chrome启动
                chromeDriver.Quit(); //完全退出浏览器并释放资源
            }
        }
    }
}

示例3:不使用using语句+Quit

using OpenQA.Selenium.Chrome;
namespace ChromeBotTest
{
    public class Program
    {
        private static async Task Main(string[] args)
        {
            ChromeDriver chromeDriver = new(); 
            await Task.Delay(3000); //等待Chrome启动
            chromeDriver.Quit(); //完全退出浏览器并释放资源
        }
    }
}

示例4:手动Dispose+置空实例

using OpenQA.Selenium.Chrome;
namespace ChromeBotTest
{
    public class Program
    {
        private static async Task Main(string[] args)
        {
            ChromeDriver? chromeDriver = new();
            await Task.Delay(3000); //等待Chrome启动
            chromeDriver.Close(); //关闭所有窗口
            chromeDriver.Quit(); //完全退出浏览器并释放资源
            chromeDriver?.Dispose(); //手动释放资源(防止未自动释放)
            chromeDriver = null; //置空实例确保清理
        }
    }
}

示例5:手动触发垃圾回收

using OpenQA.Selenium.Chrome;
namespace ChromeBotTest
{
    public class Program
    {
        private static async Task Main(string[] args)
        {
            ChromeDriver? chromeDriver = new();
            await Task.Delay(3000); //等待Chrome启动
            chromeDriver.Close(); //关闭所有窗口
            chromeDriver.Quit(); //完全退出浏览器并释放资源
            chromeDriver?.Dispose(); //手动释放资源(防止未自动释放)
            chromeDriver = null; //置空实例确保清理
            await Task.Delay(2000); //延迟2秒
            GC.Collect();
            GC.WaitForPendingFinalizers(); //等待终结器执行
            GC.Collect();
            await Task.Delay(10000); //等待10秒确保垃圾回收完成
        }
    }
}

内容的提问来源于stack exchange,提问作者freyfrey01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 01:45:04