asp.net - 同一应用程序池中的网站是否共享加载的库?

标签 asp.net iis application-pool

我有一个带有 IIS 8.0 的 Windows Server 2012。它托管了许多用户群较低的小型网站,这些网站在任何方面都不是关键任务。对于小型网站,我的意思是应用程序代码和内存占用量相当低,但是由于加载的库,例如 EntityFramework,应用程序在新启动和空闲时的内存消耗约为 140MB。

一般来说,对于一个成熟的网络服务器来说,这不是什么大问题,但我只有一个带有 4GB RAM 的 VPS,它还运行其他几个应用程序(数据库、BIND、hMail 等)。我基本上将它用作开发服务器来使用许多不同的技术。因此,当我提供数十个 ~140MB w3wp 的服务时,RAM 很快就会耗尽。

除了空闲时挂起之外,我还想减少内存消耗,同时仍然使用我想使用的任何框架或库——这实际上是整个事情的目的。

长话短说:由于应用程序不仅共享相同的 .NET 版本,而且还共享一些库,如 EF 或 MVC,在一个 app_pool 中运行多个站点以便它们可以共享库是否更有意义?或者每个站点都会加载自己的副本(由于不同的应用程序域,如讨论的 here )?

奖金问题:在考虑硬件升级时,1GB 的 RAM 是 20 美元/月,但将整个服务器放在 SSD 上是 10 美元/月。虽然我知道从页面文件读取总是比从 RAM 读取慢得多,但我正在考虑在 SSD 上使用大页面文件,而不是以两倍的价格购买 1gig 的额外 RAM - 同样,网站的速度不是关键,他们应该只是工作。这有什么意义吗?

最佳答案

在 Process Explorer 中查看 w3wp 进程(托管多个站点)表明它托管了几个不同的应用程序域,其中加载到内存中的相同程序集的不同实例。因此,将站点移动到单个 AppPool 中可能没有多大帮助。

但还有另一种选择。在 IIS 8+ 中,您可以跨 AppPools 共享通用程序集。如果某些程序集被多个 AppPool 使用,它们只会被加载到内存中一次,然后由不同的进程命名。

看看this bit from asp.net而这个 TechNet blog post

你必须做一些设置工作,但它似乎工作得很好。

关于asp.net - 同一应用程序池中的网站是否共享加载的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20760634/

相关文章:

node.js - Azure 上的路由问题/node.js vue 应用程序

IIS 7.5 应用程序池将错误的 %APPDATA% 用于自定义用户作为标识

asp.net - 如何查找 IIS 功能的名称

asp.net - 为我的每个客户提供专用数据库和应用程序池是否可扩展?

asp.net - 混合 ASP.NET/ASP.NET MVC 应用程序中的 Index.aspx

.net - asp.net 应用程序的最终用户是否需要安装 .net

asp.net - 网络机器人问题

c# - ASP.NET 在子目录中运行应用程序

IIS 应用程序池在 Windows 10 中的 32 位模式下失败

c# - 如何以编程方式在 IIS 8 上设置 App Pool Identity