c# - windows服务内存泄漏,IIS进程不死

标签 c# windows service httpclient

我目前正在开发一项健康监控服务,该服务将调用当前机器托管的每个网站。它所做的是贯穿所有托管网站的基本功能,通过 HttpClient 对机器进行调用,并将它们的当前状态响应保存到数据库中。这样做的问题是,该服务在运行时会创建多个 IIS 工作进程,这些进程不会消失,并且内存使用率每隔几分钟就会增加 1%。我很确定这不是巧合,我已经搜索了很多关于这个问题的不同主题,但找不到适合我的结果。关于如何解决这个问题有什么想法吗?这是我正在使用的代码的摘录:

        public void PingWebsites(List<Website> websites)
    {
        using (var client = new HttpClient())
        {
            for (int i = 0; i < websites.Count(); i++)
            {
                {

                    if (!websites[i].Environment.Contains("CI"))
                    {
                        Task<HttpResponseMessage> response = null;
                        try
                        {
                            response =  client.GetAsync(websites[i].Address);

                            if (!response.Result.IsSuccessStatusCode)
                            {
                                SaveStatus(websites[i].ID, 0);

                            }
                            else
                            {
                                SaveStatus(websites[i].ID, 1);
                            }

                        }
                        catch (Exception e)
                        {
                            SaveStatus(websites[i].ID, 0);
                        }
                        finally {
                            if (response != null)
                            {
                                response.Dispose();
                            }
                        }
                    }
                }
            }
        }
    }

我还搜索了计时器出错和 sql 调用的可能性,但我相信这更多是 HttpClient 的问题。

编辑:我也尝试过使用一个独特的 HttpClient 实例,但内存消耗是一样的,随着时间的推移消耗越来越多,所以这不是我当前的问题。

最佳答案

我已经弄清楚是什么导致了这个问题,请求会使机器过载数百个请求并且由于内存不足,它会发疯。增加容量后,就没有这个问题了

关于c# - windows服务内存泄漏,IIS进程不死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55576075/

相关文章:

驱动器号和冒号后没有斜杠的 Windows 路径 - 它指向什么?

service - CentOS 7 中的 JBoss 7 总是在路径/var/run/jboss-as 中寻找 jboss-as-standalone.pid

ubuntu - 单元服务未正确加载 : Exec format error. 在 ubuntu18.04 创建 .net 服务

Android 通知 FLAG_AUTO_CANCEL 不工作

c# - 是否有存储 UNC 路径的数据类型?

mysql - 如何在 Windows 中使用命令提示符从服务器下载 mysql 数据库

c# - 如何在 "visual studio code"中运行不安全代码?

c++ - 如何在启用显示隐藏文件和文件夹的情况下使用 C\C++ 隐藏

c# - 从 C# 调用的 Selenium Java 进程在 CCNET 构建服务器上无法正常启动

c# - 将数据从 C# 传递到 Electron