作者:不及格的程序员-八神
应用程序域,并不总是给应用程序带来隔离措失.
1 不可靠的CLR同步机制MethodImplOptions.Synchronized
目前众所周知的在写线程同步代码时,不要锁定类型对象以及字符串常量.
2 应用程序域(AppDomain)同样的缺点:[LoaderOptimizationAttribute:LoaderOptimization.MultiDomain]
这个属性被应用应用于进程的入口点方法(void Main),
CLR支持的这种机制(共享列集:marshal-by-bleed,为了节省内存),可以将不同AppDomain中的引用指向内存中同一个CLR对象.
这样的结果就是两个AppDomain域中的代码都可以在这个对象上执行锁定,而导至死锁,应用程序域将不具备应用程序隔离效应之说,而且你不能卸载AppDomain.
这些对象可以是类对象(typeof(myClass)),字符串("abc"),原理同第1点所述.
...
这样的bug,在今后的clr版本中可能仍然存在,要考虑兼容性,如果被修复代价相当高.