即使我们没有专门创建一个AppDomain,每个C#程序是否都有一个AppDomain?为什么需要?如果我们不将它们加载到单独的AppDomain中,我已阅读了关于第三方程序集崩溃整个应用程序的信息。我没有很好地理解这一点。任何人都可以解释这一点。是否有每个C#程序的AppDomain?
9
A
回答
15
AppDomain
几乎就像一个进程,它是您的应用程序运行的基础架构。需要将一个.NET程序集加载到AppDomain
中才能运行。不需要将第三方程序集加载到单独的AppDomains
中,但是如果这样做,它会在它们之间提供隔离(如两个单独的进程),并且一个中的故障不会影响另一个。应用程序域可以独立卸载。
举例来说,SQL Server使用AppDomain
s在其进程中安全地加载CLR程序集。
2
每个应用程序至少有一个应用程序域,是的。
我不知道第三方组件的含义是什么意思。
1
对于每个可以创建尽可能多的程序,至少有一个应用程序域,但您很少需要多个应用程序域。
它基本上是一个容器,其中运行特定信任的代码正在运行。
1
有一个应用程序加载到的默认应用程序域(每个实例都有自己的)。
崩溃事件意味着第三方程序集(即插件)在崩溃时会崩溃整个应用程序,如果不将其加载到单独的应用程序域中。因此,将插件加载到单独的应用程序域是一种很好的做法,因为应用程序域中的崩溃只会使该应用程序域而不是其他域崩溃。 CLR Add-In blog有一些关于此的帖子。
要注意的重要一点是,一个应用程序域并不一定需要在同一过程中或在同一系统上,所以你基本上需要它的远程处理。
3
我看了一下导致崩溃的第三方组件,如果我们不做的AppDomain
的使用,我认为你是在谈论到单独的应用程序域加载其他组件。这样他们可以从你的地址空间隔离,以防止影响你的代码崩溃。成本是在一个单独的应用程序域与装配沟通更加困难,有PERF的惩罚,所有的呼叫需要跨应用程序域边界进行军法。
这是一个相当先进的话题,我建议在Richter(其他书是可用的)阅读。
相关问题
- 1. 是否为每个请求创建AppDomain?
- 2. 是否预定义了一个新的appdomain程序集?
- 3. 每个SSIS作业是否在它自己的AppDomain下运行?
- 4. 是否每个Objective C程序都转换为C代码?
- 5. 是否有一个实用程序来缩进C++程序
- 6. 每个Java应用程序是否有一个JVM?
- 7. 是否有它可以产生一个有效的C程序
- 8. IIS中是否需要AppDomain?
- 9. C#:AppDomain中ShadowCopyDirectories是空
- 10. appdomain C++ c#
- 11. Quartz.NET计划程序AppDomain
- 12. 卸载AppDomain程序集
- 13. 是否有程序将程序集转换为C++?
- 14. ASP.Net应用程序中的所有页面是否都在同一个AppDomain中运行?
- 15. 每个AppDomain允许拥有多少个app.config文件?
- 16. 是否需要admin.py是每个django应用程序?
- 17. Silverlight是否每次下载程序集?
- 18. 项目中的每个django应用程序是否都有自己的urls.py?
- 19. COM Interop是否尊重用于程序集加载的.NET AppDomain边界?
- 20. main()是否需要包含处理程序的每个脚本?
- 21. 每个HTTP请求是否有一个Rack应用程序实例?
- 22. 每个应用程序是否只有一个共享首选项对象?
- 23. AppDomain是否等价于.NET代码的进程?
- 24. AppDomain是否在自己的线程中执行?
- 25. 程序中是否有程序集?
- 26. 从任何AppDomain调用Environment.Exit是否退出整个过程(如果不是IsDefaultAppDomain)?
- 27. 每个操作系统是否都有自己的汇编程序?
- 28. iPhone是否有内置的缓存机制(每个应用程序)?
- 29. C#阻止AppDomain程序集的类实例从文件访问
- 30. 每个会话或每个应用程序是否新增了System.Runtime.Caching.MemoryCache类?