当前位置:  开发笔记 > 编程语言 > 正文

使用AppDomain的好例子

如何解决《使用AppDomain的好例子》经验,为你挑选了3个好方法。

我在采访中不断被问及AppDomains,我知道基础知识:

它们是应用程序中的隔离级别(使它们与应用程序不同)

他们可以有线程(使它们与线程不同)

一个appdomain中的异常不会影响另一个

appdomains无法访问彼此的内存

每个appdomain都可以有不同的安全性

我仍然没有得到使他们成为必要的东西.当你使用一个时,我正在寻找一个合理的具体情况.

回答:

不受信任的代码

核心应用程序受保护
不受信任的/第三方插件被禁止通过隔离在具有安全限制的单独appdomain中来破坏共享内存和对注册表或硬盘驱动器的非授权访问,从而保护应用程序或服务器.例如ASP.NET和SQL Server托管组件代码

可信代码

稳定性
应用程序分为安全,独立的特性/功能

架构灵活性
自由在单个CLR实例或每个程序中运行多个应用程序.

还要别的吗?



1> Michael Burr..:

可能最常见的是加载包含来自不受信任方的插件代码的程序集.代码在自己的AppDomain中运行,隔离应用程序.

此外,无法卸载特定程序集,但您可以卸载AppDomains.

对于完整的纲要,克里斯布鲁姆有一个大量的博客条目:

http://blogs.msdn.com/cbrumme/archive/2003/06/01/51466.aspx



2> Jon Turner..:

AppDomains的另一个好处(正如您在问题中提到的)是您加载到其中的代码可以使用不同的安全权限运行.例如,我编写了一个动态加载DLL的应用程序.我是一名教练,这些是我正在加载的学生DLL.我不想让一些心怀不满的学生消灭我的硬盘或破坏我的注册表,所以我将他们的DLL中的代码加载到一个单独的AppDomain中,该AppDomain没有文件IO权限或注册表编辑权限甚至是显示新窗口的权限(它实际上只有执行权限).



3> C. Dragon 76..:

我认为拥有AppDomains的主要动机是CLR设计人员想要一种隔离托管代码的方法,而不会产生多个Windows进程的性能开销.如果CLR最初是在UNIX之上实现的(创建多个进程的成本要低得多),AppDomains可能永远不会被发明.

此外,虽然第三方应用程序中的托管插件架构绝对是AppDomains的良好用途,但它们存在的更大原因是SQL Server 2005和ASP.NET等知名主机.例如,ASP.NET托管提供商可以提供共享托管解决方案,该解决方案支持来自多个客户的多个站点,所有这些站点都在同一个Windows上运行.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有