【发布时间】:2011-05-07 08:26:03
【问题描述】:
由于动态程序集加载需要加载应用程序域以启用通过卸载相关应用程序域来终止程序集,因此在要加载的进程中是否存在“最大”数量的应用程序域?我正在考虑一个基于服务器的应用程序,每个用户都可以动态运行他的专有 C# 代码。但是,假设有 2000 个用户登录并加载他们的代码怎么办?除了应用程序的数量之外,我可能会遇到任何限制吗?
谢谢。
【问题讨论】:
标签: c# .net appdomain dynamic-loading
由于动态程序集加载需要加载应用程序域以启用通过卸载相关应用程序域来终止程序集,因此在要加载的进程中是否存在“最大”数量的应用程序域?我正在考虑一个基于服务器的应用程序,每个用户都可以动态运行他的专有 C# 代码。但是,假设有 2000 个用户登录并加载他们的代码怎么办?除了应用程序的数量之外,我可能会遇到任何限制吗?
谢谢。
【问题讨论】:
标签: c# .net appdomain dynamic-loading
【讨论】:
主要是由您的操作系统限制定义的。你的 x86 机器不能为一个进程使用超过 4GB 的内存[在用户模式下只有 2GB]。如果你选择 x64,你会有更大的限制。据我所知,您可以创建的应用程序域的数量没有这样的限制。
【讨论】:
几乎所有 CLR 限制都基于“内存允许”。我知道的唯一例外是类的成员数,限制为 65536。这是基于令牌值的定义。 AppDomains 没有这样的东西。
【讨论】:
AppDomain。每个 ASP.NET 网站基本上是 1 个。 AppDomain 会存活很长一段时间,尽管有条件会自动“回收”它。我不确定 SQL Server 做了什么,但不会为每个查询创建一个新的 AppDomain。
HttpApplication.Error 事件。如果没有处理程序,则显示默认的 500 错误页面。如果发生了非常糟糕的事情,ASP.NET 将回收域,或者整个工作进程可能会重新启动,但大多数未处理的异常不会导致这些事情。