内存没有被Asp.Net核心API释放

时间:2017-10-10 16:30:17

标签: c# asp.net-web-api memory asp.net-core garbage-collection

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

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);
    }
}

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

此屏幕截图显示GC被调用一次但无法帮助清理内存。

memory from diagnostics

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

enter image description here

1 个答案:

答案 0 :(得分:1)

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

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

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

    这个可能会贬低其他一些东西。阅读更多相关信息here