我遇到一个问题,即我的.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被调用一次但无法帮助清理内存。
以下是升级到2.0并禁用遥测信息后的诊断信息:
答案 0 :(得分:1)
似乎Application Insights即使您不使用它也会收集数据,因此您会看到内存增加。一段时间后,GC会收集这些对象。
Visual Studio默认启用应用程序洞察。有两个选项可以关闭Application Insights:
TelemetryConfiguration.Active.DisableTelemetry = true;
添加到ConfigureServices,您应该会看到性能改进。 ASPNETCORE_preventHostingStartup
键:"environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_preventHostingStartup": "True" }
这个可能会贬低其他一些东西。阅读更多相关信息here。