我大致了解AppDomain是什么,但我并不完全了解AppDomain的用途.
我参与了一个基于服务器的大型C#/ C++应用程序,我想知道如何使用AppDomains来提高稳定性/安全性/性能.
特别是:
Dan*_*ker 14
AppDomain的基本用例是在托管第三方代码的环境中,因此不仅需要动态加载程序集,还需要卸载它们.
没有办法单独卸载组件.因此,您必须创建一个单独的AppDomain来容纳可能需要卸载的任何内容.然后,您可以在必要时删除并重建整个AppDomain.
顺便说一句,破坏堆的本机代码无法受到CLR的任何功能的保护.最终,CLR本地实现并共享相同的地址空间.所以这个过程中的本机代码可以遍布CLR的内部!隔离行为不当(即大多数)本机代码的唯一方法是在OS级别实际进程隔离.启动多个.exe进程并让它们通过某种IPC机制进行通信.
我强烈推荐Jeffrey Richter的CLR Via C#.特别是第21章详细介绍了AppDomains的用途和用途.
在回答你的观点/问题时:
AppDomains不会保护您的应用程序免受恶意非托管代码的侵害.如果这是一个问题,您很可能需要使用操作系统提供的完整进程隔离.
AppDomains之间的通信使用.NET远程执行来强制隔离.这可以通过引用编组或按值语义编组,在性能和灵活性之间进行权衡.
AppDomains是一种在托管代码中实现隔离等过程的轻量级方法.AppDomains被认为是轻量级的,因为您可以在单个进程中创建多个AppDomain,因此它们可以避免多个OS进程的资源和性能开销.此外,单个线程可以在一个AppDomain中执行代码,然后在另一个AppDomain中执行代码,因为Windows对AppDomains一无所知(请参阅使用System.AppDomain.CurrentDomain)
| 归档时间: |
|
| 查看次数: |
2442 次 |
| 最近记录: |