ASP.NET - 上下文敏捷对象,应用程序域中的数据共享概念?
看了一些关于Application Domain的文章,深读终于头晕目眩 所以我把问题提交给学科专家。
1) 由于 CLR 在需要时负责创建 AppDomain,是否存在关键的 需要手动创建应用程序域吗?
2)我听说一个应用程序域不能与其他应用程序域共享数据(我 我不确定)。Windows Communication Foundation 的情况怎么样?
3) 通常,基本库(system.dll、mscorlib.dll)会加载到默认应用程序域中。我可以将它们加载到自定义创建的应用程序域中吗?如果可能的话,CLR 会在默认应用程序域中保留一个副本吗?
比如
------------------ ----------------
Default AppDomain Custom Appdomain
------------------- ----------------
mscorlib.dll mscorlib.dll
System.dll System.dll
..... .......
----------------- -----------------
4)应用程序域中的术语“上下文敏捷对象”指的是什么?
I read some articles about Application Domain.The deep reading finally resulted in whirling
confusion.So I submit the questions to subject experts.
1) As CLR takes care of creating AppDomain as and when needed,could there be a critical
need to go for manual Application Domain Creation ?
2)I heard that one application domain can not share data with other application domain (i
am not sure).What about the case of windows communication foundation ?
3) Normally the basic libraries (system.dll,mscorlib.dll) are loaded in default application domain. can i load them in custom created application domain ? if it is possible,will CLR keep a copy in Default application domain ?
like
------------------ ----------------
Default AppDomain Custom Appdomain
------------------- ----------------
mscorlib.dll mscorlib.dll
System.dll System.dll
..... .......
----------------- -----------------
4) What is the term context-agile object in application domain referes to?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当您需要隔离(例如沙箱第 3 方代码)或能够重新加载在执行过程中发生更改的代码时,创建您自己的 AppDomain 有时很有用。 (您无法卸载程序集,但可以卸载AppDomain。)
在AppDomain 之间共享数据涉及编组。数据可以按值编组(即复制所有内容),也可以按引用编组(如果您的对象派生自
MarshalByRefObject
)。在后一种情况下,实际上到达另一个AppDomain
的是对代理对象的引用。您在代理上执行的任何操作实际上都是针对原始AppDomain
中的真实对象执行的。不完全确定你的意思。您当然可以使用其他 AppDomain 中的所有系统程序集。
我还没有遇到过这个术语,我记得。
Creating your own AppDomains is useful sometimes when you want isolation (e.g. sandboxing 3rd party code), or the ability to reload code which changes during execution. (You can't unload an assembly, but you can unload an AppDomain.)
Sharing data between AppDomains involves marshalling. The data can either be marshalled by value (i.e. everything gets copied) or by reference if your object derives from
MarshalByRefObject
. In the latter case, what actually gets through to the otherAppDomain
is a reference to a proxy object. Anything you do on the proxy is actually done to the real object in the originalAppDomain
.Not entirely sure what you mean. You can certainly use all the system assemblies in other AppDomains.
I haven't come across this term, that I can remember.
AppDomains 可以使用服务将信息从一个域传递到另一个域,例如您在问题 2 中所说的 WCF。
AppDomains can pass information from one to the other using services, such as WCF as you said in question 2.