我在采访中不断被问及AppDomains,我知道基础知识:
我仍然没有得到使他们成为必要的东西.当你使用一个时,我正在寻找一个合理的具体情况.
回答:
还要别的吗?
Mic*_*urr 49
可能最常见的是加载包含来自不受信任方的插件代码的程序集.代码在自己的AppDomain中运行,隔离应用程序.
此外,无法卸载特定程序集,但您可以卸载AppDomains.
对于完整的纲要,克里斯布鲁姆有一个大量的博客条目:
http://blogs.msdn.com/cbrumme/archive/2003/06/01/51466.aspx
Jon*_*ner 14
AppDomains的另一个好处(正如您在问题中提到的)是您加载到其中的代码可以使用不同的安全权限运行.例如,我编写了一个动态加载DLL的应用程序.我是一名教练,这些是我正在加载的学生DLL.我不想让一些心怀不满的学生消灭我的硬盘或破坏我的注册表,所以我将他们的DLL中的代码加载到一个单独的AppDomain中,该AppDomain没有文件IO权限或注册表编辑权限甚至是显示新窗口的权限(它实际上只有执行权限).
我认为拥有AppDomains的主要动机是CLR设计人员想要一种隔离托管代码的方法,而不会产生多个Windows进程的性能开销.如果CLR最初是在UNIX之上实现的(创建多个进程的成本要低得多),AppDomains可能永远不会被发明.
此外,虽然第三方应用程序中的托管插件架构绝对是AppDomains的良好用途,但它们存在的更大原因是SQL Server 2005和ASP.NET等知名主机.例如,ASP.NET托管提供商可以提供共享托管解决方案,该解决方案支持来自多个客户的多个站点,所有这些站点都在同一个Windows上运行.