ASP .NET WebApi POST 方法将请求主体保存在内存中

ASP .NET WebApi POST method keeping request body in memory

我注意到我的服务器内存使用量很大,所以当我检查它时,我发现 IIS 进程在收到一个请求后始终占用 200-400 兆字节的内存。经过一些检查后,我将我的 Web 服务方法完全剥离为这个,问题仍然存在:

public IHttpActionResult Post([FromBody]JToken json)
{
return Ok();
}

通常到达的 json 相当大,但据我所知,WebApi 应该在返回 Ok 后处理掉它。这与 IIS 缓存有关吗?

but to my knowledge​ the WebApi should dispose of it after returning Ok.

这不一定是真的。 return Ok(); 之后会发生的是 json 变量超出范围。当一个变量超出范围时,它就可以进行垃圾回收。这根本不意味着将立即处理掉。它将在下一次 GC 发生时被释放。例如,如果存在内存压力,可能会发生这种情况。这是 CLR 负责的事情,您不必太在意。 IIS 中的工作进程占用一些内存是很正常的。在服务器操作系统上,GC 进行了优化,因此它仅在需要清理资源时运行,以避免浪费宝贵的 CPU 周期。