作者:不及格的程序员-八神


应用程序域,并不总是给应用程序带来隔离措失.

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版本中可能仍然存在,要考虑兼容性,如果被修复代价相当高.

相关文章:

  • 2021-08-18
  • 2021-11-20
  • 2021-11-08
  • 2022-12-23
  • 2021-12-30
猜你喜欢
  • 2021-06-09
  • 2021-11-21
  • 2022-12-23
  • 2021-12-25
  • 2021-09-21
  • 2021-09-01
相关资源
相似解决方案