【问题标题】:Max number of appdomains loaded in one process一个进程中加载​​的最大应用程序域数
【发布时间】:2011-05-07 08:26:03
【问题描述】:

由于动态程序集加载需要加载应用程序域以启用通过卸载相关应用程序域来终止程序集,因此在要加载的进程中是否存在“最大”数量的应用程序域?我正在考虑一个基于服务器的应用程序,每个用户都可以动态运行他的专有 C# 代码。但是,假设有 2000 个用户登录并加载他们的代码怎么办?除了应用程序的数量之外,我可能会遇到任何限制吗?

谢谢。

【问题讨论】:

    标签: c# .net appdomain dynamic-loading


    【解决方案1】:

    我不相信 CLR 中内置了明确的最大值。而是由剩余的内存量决定您是否可以动态加载新的应用程序域。

    我会做一些研究,但我认为没有为此设定值。

    编辑:

    Here's 另一个可能有助于澄清问题的帖子。

    【讨论】:

      【解决方案2】:

      主要是由您的操作系统限制定义的。你的 x86 机器不能为一个进程使用超过 4GB 的内存[在用户模式下只有 2GB]。如果你选择 x64,你会有更大的限制。据我所知,您可以创建的应用程序域的数量没有这样的限制。

      【讨论】:

        【解决方案3】:

        几乎所有 CLR 限制都基于“内存允许”。我知道的唯一例外是类的成员数,限制为 65536。这是基于令牌值的定义。 AppDomains 没有这样的东西。

        【讨论】:

        • ASP.NET 不会为每个请求创建 1 个 AppDomain。每个 ASP.NET 网站基本上是 1 个。 AppDomain 会存活很长一段时间,尽管有条件会自动“回收”它。我不确定 SQL Server 做了什么,但不会为每个查询创建一个新的 AppDomain
        • @bin - 故障隔离是关键。一旦线程因未处理的异常而死亡,广告就是垃圾。不可能是 一个 页面请求炸弹杀死所有其他并发的。回收那些没有死的听起来可能。我不知道确切的规则。
        • ASP.NET 在堆栈上有一个很大的旧 try/catch。流入HttpApplication.Error 事件。如果没有处理程序,则显示默认的 500 错误页面。如果发生了非常糟糕的事情,ASP.NET 将回收域,或者整个工作进程可能会重新启动,但大多数未处理的异常不会导致这些事情。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-24
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多