我最近在WinHost.com上租用了一些共享空间(基本包)。 我部署了一个使用NHibernate的ASP MVC3应用程序。 这是一个非常精简的应用程序,我已经剖析了它的内存泄漏和我本地的IIS 6.1我从来没有问题。
但是,当部署到WinHost时,应用程序池将继续回收。 他们的支持说,基本包给你一个100M的最大应用程序池大小。 我有相同的应用程序代码运行在他们的最大包和支持告诉我,它使用其200MB的限制130MB。
在我运行之前,将我的基本软件包升级到Max之前,有没有人知道这是一个轻量级的ASP MVC应用程序的典型大小。 它不使用会话或caching,页面非常薄。 对我来说,看起来很奇怪,你不能在他们的基本包上运行一个ASP应用程序。 他们只是专为静态网站或东西?
这很难预测。 我已经看到轻量级的MVC应用程序,单个工作进程消耗12-1300 MB的内存(是的,1.3 GB)。
正如您可能知道的那样,.NET CLR是围绕2阶段编译模型构build的,这意味着您的预编译程序集仍然需要从MSIL(Microsoft的通用中间语言实现)转换为机器代码。 首先对IIS应用程序发出请求时,将对所有页面进行分析和编译,并将结果caching到进程的内存中。
所以你的实际输出可能不是那么“重”,但是这个过程仍然需要为编译的程序集和从全局程序集caching加载的所有依赖程序集分配内存。
而且,它不仅仅取决于应用程序本身。 当应用程序的请求队列为10时,与1000次命中(即使每个请求的内存占用量较低)相比,内存差别很大。
对我来说,一个100MB的限制听起来像是相当的克制
你和供应商的平台都是一样的吗? 我发现在x64上运行应用程序时,与x86相比,内存使用率增加了,如果有很多的对象,它可以翻一番。