Asp.net 在w3wp进程之间共享程序集以减少内存使用
问题我们在一台机器上发布了许多微服务,即:30个实例,每个实例使用150–300 mb。 许多微服务使用相同的库,但独立加载 问题CLR能否加载程序集一次并与其他域共享以减少内存使用 调查和实验当我通过ProcessExplorer调查这个问题时,我发现每个w3wp进程有两个应用程序域。 其中一个用于从GAC加载程序集,另一个用于从应用程序文件夹加载程序集 当我在GAC中放置公共程序集时。 它增加了所有进程的可共享、共享WS,并减少了私有WS。但是工作集没有改变 打开并查看w3wp进程的内存结构Asp.net 在w3wp进程之间共享程序集以减少内存使用,asp.net,.net,iis,w3wp,Asp.net,.net,Iis,W3wp,问题我们在一台机器上发布了许多微服务,即:30个实例,每个实例使用150–300 mb。 许多微服务使用相同的库,但独立加载 问题CLR能否加载程序集一次并与其他域共享以减少内存使用 调查和实验当我通过ProcessExplorer调查这个问题时,我发现每个w3wp进程有两个应用程序域。 其中一个用于从GAC加载程序集,另一个用于从应用程序文件夹加载程序集 当我在GAC中放置公共程序集时。 它增加了所有进程的可共享、共享WS,并减少了私有WS。但是工作集没有改变 打开并查看w3wp进程的内存结
- 158 Mb中的61个–映像(已加载的程序集)
- 158MB页面文件中的40个(与进程相关的内存)
- (优点)域无关程序集是跨多个AppDomain的程序集
- (优点)域无关程序集将只进行一次JIT
- (优点)jitted代码以及MethodTables、MethodDesc等各种运行时数据结构将在appdomains之间共享李>
- (缺点)一旦强名称程序集加载到域中,您就不能更新它,所以您应该回收(重新加载)应用程序池
(另请参见:Pro.NET Performance:优化您的C#应用程序。第289页)我想进程的内存是相互隔离的。我在Process Explorer帮助中找到了下一个定义。Shareable WS分配给类型或区域的物理内存量,可与其他进程共享。Shared WS当前与其他进程共享的可共享WS的数量。不太可能实现。但是如果你使用ASP.NETCore,微软还有别的功能。