NET有应用程序域的概念,据我所知,它可以用来将程序集加载到内存中.我对应用领域做了一些研究,也go 当地的书店了解了一些关于这个主题的额外知识,但这似乎非常稀少.

我所知道的应用程序域可以做的就是在内存中加载程序集,并在需要时卸载它们.

What are the capabilities other that I have mentioned of Application Domains? Do Threads respect Application Domains boundaries? Are there any drawbacks from loading Assemblies in different Application Domains other than the main Application Domains beyond performance of communication?

还可以链接到讨论应用程序域的资源.我已经查过MSDN了,那里没有太多关于他们的信息.

推荐答案

AppDomains最好可视化为一个非常轻量级的过程.

每个.Net进程可以有N个AppDomain,但通常只有一个.AppDomain的真正优势是它们在您的进程中提供了隔离边界.对象只能通过远程处理或序列化跨越AppDomain边界相互通信.

还可以在一个进程中以完全不同的安全级别运行两个AppDomain.这可以让你在完全信任的情况下运行你的主应用程序,同时在低得多的信任级别上运行不受信任的插件.

对于线程是否尊重AppDomain,很难一概而论.单个线程可以位于N个不同的AppDomain中.如果一个AppDomain中的对象远程调用另一个AppDomain中的对象,则可能出现这种情况.线程必须在AppDomain之间转换才能完成.

AppDomains的缺点主要是复杂性.远程处理可能需要一点时间来让你的头脑清醒过来,正确设置AppDomain可能是一个不平凡的过程.

您可能想浏览一下AppDomains上的MSDN文档.很难找到一个简洁的教程来描述它们,因为它们有各种复杂的特性.这提供了一个很好的概述,如果它不能直接回答你的问题,至少会为你指出正确的地方.

http://msdn.microsoft.com/en-us/library/cxk374d9.aspx

本文件不再保存,更新版本请参考本文件:

.net相关问答推荐

Docker失败文件找不到

当 Func 委托需要接口作为参数时,它是如何工作的?

无法加载文件或程序集 不支持操作. (来自 HRESULT 的异常:0x80131515)

判断内部异常的最佳方法?

"投掷;" 是什么意思?靠自己做什么?

使用字典作为数据源绑定组合框

string.Format 如何处理空值?

value 的默认参数必须是编译时间常数?

JavaScript 中的IsNullOrWhitespace?

实例化具有运行时确定类型的对象

如何对无法加载的 VSTO 插件进行故障排除?

C#:获得完整的桌面大小?

.NET 的 String.Normalize 有什么作用?

如何使用 c# 仅获取目录中的文件名?

如何将 System.Type 转换为其可为空的版本?

Visual Studio 2017 和 2019 突出显示滚动条中所选单词的出现

微软内部 PriorityQueue 中的错误?

立即检测客户端与服务器套接字的断开连接

如何以编程方式删除 WebClient 中的 2 个连接限制

将 Dictionary 转换为匿名对象?