每个连接的MVC 4 IIS内存泄漏

Con*_*ell 6 c# asp.net iis-7 asp.net-mvc-4

我有一个AsyncController设置来执行长轮询操作.这一切都运行正常,但是一位同事注意到服务器上的内存泄漏似乎随着每个新连接而增加.

我已经创建了一个小应用程序,可以从这个页面请求数千次,我正在监视IIS进程的内存使用情况.每个连接都会增加内存使用量,但在客户端断开连接时不会一直下​​降.

经过进一步的调查,我发现即使我AsyncController用一个Controller除了这个之外什么都不做的标准替换我,这仍然会发生:

public class WaitController : Controller
{
    public JsonResult Member(string oauth_token, int service_id, bool busy = false)
    {
        return Json(new
        {
            ready = false,
        }, JsonRequestBehavior.AllowGet);
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然在这方面,没有那么多的内存使用,但行为似乎完全相同.

我已经运行了一个内存分析器来显示10,000个连接之间的区别,那里几乎没有任何东西.大多数内存都是ExpiresEntry[]System.Web.Caching或者实例占用的System.Runtime.Caching,但是与我在IIS工作进程中获得的内存增加相比,这些内存总数为空.

我的问题是,IIS是通过设计做到这一点的吗?也许这已被分配给连接线程,这些线程只是在以后需要它们时才会被挂起?这是IIS,ASP.NET还是MVC 4的错误?

我决定使用MVC 4的WebAPI功能,因为我们希望它具有灵活性,可维护性,面向未来并可通过AJAX访问.从开发的角度来看,它似乎也有意义,因为我们也在MVC 4中构建了网站.

但是,一位同事现在将此作为系统架构的一个关键问题提出,因为我们将来(将来)需要连接数千个客户端.他建议我们改用WCF.所以,奖金问题 - 将使用WCF解决这些问题?

小智 1

MS 现场工程师有一篇关于此主题的精彩文章。可能有帮助。