【问题标题】:ASP .NET WebApi POST method keeping request body in memoryASP .NET WebApi POST 方法将请求正文保存在内存中
【发布时间】:2017-08-27 09:36:28
【问题描述】:

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

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

通常到达的json 很大,但据我所知,WebApi 应该在返回Ok 后将其处理掉。这与 IIS 缓存或某种相关吗?

【问题讨论】:

    标签: c# http iis asp.net-web-api iis-7


    【解决方案1】:

    但据我所知,WebApi 应该在返回 Ok 后将其处理掉。

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

    【讨论】:

    • 问题是,长时间这样,其他服务也消耗内存,服务器开始卡顿。
    • 一旦有内存压力GC应该发生并释放它。不要担心它。长时间保持这种状态是完全正常的。
    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    相关资源
    最近更新 更多