【发布时间】:2015-06-08 23:41:38
【问题描述】:
我的公司有大量客户,我们目前能够在每台服务器上处理有限数量的客户。但是,每个客户端都使用相同的核心 Web 应用程序。目前,某些内容存储在每个站点的本地,因此我们不能让它们使用相同的站点/应用程序池;虽然我们确实有一个多租户转换项目。
我们对所有程序集都进行了严格签名,我认为看看我们是否可以让它们在 ASP.NET 中加载域中立是一个有趣的想法。这样做的好处是显着降低我们的内存成本,这是我们目前最高的成本/限制因素之一。此外,我们似乎能够简化当前受 [编译] IO/CPU 限制且经常花费我们大约 6 小时的部署流程。
此任务意味着我想将程序集从在应用程序池的应用程序域中加载到共享域。
我对域中性加载要求的理解是:
- 程序集必须经过严格签名并在 GAC 中。
- 绑定闭包中的依赖项必须在 GAC 中 [并经过强签名]。
我试图让它工作,但我无法让它为一个小的示例应用程序工作。我首先尝试将 Newstonsoft.Json 放入 GAC,令我兴奋的是,它在回收后翻转到了共享域。但是,即使在对他们全部进行 GAC 处理后,我也无法让其他任何人切换到共享域:
我的目标是让我的主应用程序 DLL 被加载到域中立。如何调试/继续找出剩余程序集未作为域中性加载的原因?
此外,我对 NGEN 代码页共享与共享域加载程序集的关联或对比感到有些困惑。
【问题讨论】:
-
我很好奇你在这个练习中的最终目标是什么?是为了性能还是维护还是别的什么?
-
@Jonathan 我在第二段中注意到了大部分内容。我们是一家成长中的公司,并且已经发展到在我们的系统上运行大约 2,000 个站点。优化部署和内存成本很可能是一项高价值回报的工作。不过除了这些因素....我的理解有些欠缺,我想了解我还不了解的内容。
-
我认为这种类型设置的内存节省不等于努力。还有许多其他因素可以带来更多收益。
-
浪费 6 小时具体是什么意思?您的意思是当您更新 2,000 个应用程序时?
标签: asp.net .net asp.net-mvc-4 clr applicationdomain