繁体   English   中英

内存没有在 Asp.Net 核心 api 中得到释放

[英]Memory not getting freed up in Asp.Net core api

我有一个问题,我的 .NET Core Web API 中的内存没有得到释放。 我所做的只是从静态类返回一个字符串。

应用程序接口:

[HttpGet]
public string Get()
{
    return A.get();
}

public static class A
{
    public static string get()
    {
        return "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    }
}

客户:

HttpClient hc = new HttpClient();
for(int i=0;i<100000;i++)
{
    //var v = hc.GetAsync("http://localhost:52425/api/values").result;
    hc.GetStringAsync("http://localhost:52425/api/values");
    if(i%1000 == 0)
    {
        Thread.Sleep(10000);
        Console.WriteLine("Sleeping-----------" + i);
    }
}

我尝试直接从没有静态类的操作方法返回字符串。 我还尝试以同步方式而不是异步方式从客户端调用 API。 这些都没有任何区别。

这张截图显示了 GC 被调用一次但无助于清理内存的地方。

诊断记忆

以下是升级到 2.0 并禁用遥测信息后的诊断信息:

在此处输入图片说明

即使您不使用 Application Insights,它似乎也在收集数据,因此您会看到内存增加。 一段时间后,这些对象由 GC 收集。

默认情况下,Visual Studio 会启用应用程序洞察。 有两个选项可以关闭 Application Insights:

  1. 添加TelemetryConfiguration.Active.DisableTelemetry = true; 到 ConfigureServices,您应该会看到性能改进。
  2. 在 launchSettings.json 中添加ASPNETCORE_preventHostingStartup键:
 "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_preventHostingStartup": "True" }

这个可以潜在地关闭其他一些东西。 在此处阅读更多相关信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM