.NET 应用程序域(AppDomain)并不可靠,微软的错误.

探讨了.NET运行环境中应用程序域(AppDomain)的隔离限制及其潜在的死锁风险。通过分析CLR提供的LoaderOptimization.MultiDomain特性,揭示了不同应用程序域间对象共享可能导致的问题。
作者:不及格的程序员-八神


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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值