我是相当新的反思,我想知道我会用(第二)AppDomain的?在商业应用程序中会有什么实际应用?我什么时候可以使用AppDomain?
7
A
回答
9
有许多用途。辅助AppDomain可以提供与操作系统提供的进程隔离类似的一定程度的隔离。
我用它的一个实际用途是动态加载“插件”DLL。我想支持在主可执行文件启动时扫描DLL目录,加载并检查它们的类型以查看是否实现了特定的接口(即插件契约)。在不创建辅助AppDomain的情况下,您无法卸载可能没有实现所寻求接口的任何类型的DLL /程序集。在您的过程中,您可以创建辅助AppDomain,然后在其中加载程序集,然后检查类型,而不是在您的过程中携带额外的程序集和类型等。当你完成后,你可以摆脱辅助AppDomain,因此你的类型。
2
99%的时间我会避免额外的AppDomains。它们本质上是分开的过程。您必须将数据从一个域编组到另一个域,这会增加复杂性和性能问题。
人们试图使用AppDomains来解决一旦将程序集加载到AppDomain中后无法卸载程序集的问题。因此,您创建了第二个AppDomain,您可以在其中加载动态程序集,然后卸载完整的AppDomain以释放与程序集关联的内存。
除非您需要动态加载&卸载组件,它们并不值得担心。
0
当你必须有一个单例的多个实例时,AppDomains很有用。例如,您有一个程序集为某些设备实现通信协议,此程序集使用单例。如果你想实例化这个类的多个实例(与多个设备交谈),并且你希望这些实例不会互相干扰,那么AppDomain对于这个目的是完美的。
但是,它确实会使编程变得更加困难,因为您必须做更多的工作才能跨AppDomain边界进行通信。
相关问题
- 1. 我什么时候可以使用Task.Yield()?
- 2. 什么是BigInteger,我们什么时候可以使用它?
- 3. 什么时候可以使用filter_input()
- 4. 什么时候可以使用IORef?
- 5. 什么时候可以使用lodash.after()?
- 6. 你什么时候可以使用uint_least16_t
- 7. KineticJS:我什么时候使用toImage()以及什么时候使用缓存()
- 8. 什么是切换按钮以及我们什么时候可以使用它?
- 9. Twisted,gevent eventlet - 我什么时候可以使用它们
- 10. 我什么时候可以在Java中使用package-private?
- 11. 什么时候可以使用我自己的RouteHandler?
- 12. 什么时候我们可以使用Oracle外部表
- 13. 在Java中,我什么时候可以通过sparseArray使用ArrayList?
- 14. 多线程:我什么时候可以使用Join?
- 15. 我们什么时候可以使用自定义语料库?
- 16. 什么时候可以调用BarcodeScanner.GetDefaultAsync()?
- 17. 什么时候应该使用可可?
- 18. JDBC:我什么时候可以关闭什么
- 19. R的class.ind()函数做什么?我什么时候可以使用它?
- 20. 什么时候DataView可用?
- 21. 什么时候使用__proto__和什么时候使用原型
- 22. 什么时候应该使用AWS,什么时候不使用
- 23. intn_t什么时候使用它,什么时候不使用
- 24. 什么时候使用Ruby和什么时候使用PHP
- 25. 什么时候使用ByteString,什么时候不使用?
- 26. 什么时候可以写Mockito.anyInt()?
- 27. 什么时候可以捕获RuntimeException
- 28. 什么时候可以mktime返回-1?
- 29. 什么时候可以ManualResetEvent.Set()返回false?
- 30. TDD。什么时候可以继续?
用于加载类型检测组件,如插件模型,对他们来说非常有用。所有这一切都是一个额外的启动时间。 – 2009-04-24 17:58:47
同意,但只有在某些时候要卸载它们,否则没有任何区别。 此外,对于mot业务应用程序,我不希望他们是必需的。 – Steven 2009-04-24 18:05:21