IronPython到最后还是编译为IL代码被执行了,这其中用到了动态生成程序集的技术。

然而,这个动态生成的程序集是需要在某个AppDomain中被定义的,因此,不可避免的要在AppDomain中加载这个程序集。众所周知,Assembly无法单独地从AppDomain卸载,要卸载某个Assembly,必须将它所在的AppDomain卸载。很遗憾的是,IronPython中动态生成的程序集是在程序主域中定义,也就是说,如果程序不退出,动态生成的Assembly将一直存在,最终导致内存泄漏。

让人无可奈可的是,这不仅仅是IronPython的问题,而且是整个CLR的硬伤(针对微软今后要主推的WPF)。假设要做一个插件体系的软件,按照微软的建议,我们应该在单独的AppDomain中加载插件所需的程序集,在卸载插件的时候卸载掉这个AppDomain。然而,有时候我们需要插件提供一个视图,结果WPF的控件不是从MarshalByRefObject继承而来,也就是说,它们不允许跨域的操作。为此,我们不得不把这些包含视图的程序集加载到主AppDomain中,后果就是持续的Memory Cost。

其实,微软自己也在尝这个苦果,看看.Net 3.5提供的AddIn,里面不得不用一些Adapter来实现WPF控件的跨域操作,然而控件的事件传递无法实现,而且程序经常会Crash。

当然,我们可以说,只要关闭了程序,资源就会被释放了,但恰恰有些项目是有上千个甚至上万个这样需要提供视图的Assembly(考虑一下银行的交易系统),而这些应用程序是跑在24x7无间断运行终端上的,这个问题的影响就相当严重了。

ironpython不想要可以卸载吗_IronPython的致命弱点相关推荐

  1. ironpython不想要可以卸载吗_使用IronPython给.Net程序

    开发的时候,经常被策划频繁变动的方案而苦恼.这时候就想要加入点动态语言来辅助一下. 在考虑用动态语言之前也曾想过使用动态加载dll的方式,实现基础接口来调用.在卸载的时候遇到了问题,虽可以通过应用程序 ...

  2. 电脑ironpython什么用处能卸载吗_IronPython 的几个问题

    跨语言和跨编译器的那些坑(CPython vs IronPython) 代码是宝贵的,世界上最郁闷的事情,便是写好的代码,还要在另外的平台上重写一次,或是同时维护功能相同的两套代码.所以才需要跨平台. ...

  3. ironpython是python常用的实现方式_IronPython 与C#交互

    一.介绍 Python是一种面向对象.直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几 ...

  4. 卸载后清理干净_想要清理你的Mac?选这几款软件就对了

    用 macOS 一般不太需要关注垃圾清理和杀毒等问题.但是 Mac 在使用一段时间后,同样可能产生一些无用的文件(如缓存.软件卸载残留等).虽然一般不会对系统造成损害,但是无形中也占用了宝贵的硬盘空间 ...

  5. AutoCAD安装失败怎样卸载重新安装AutoCAD,解决AutoCAD安装失败的方法总结

    技术帖:AutoCAD没有按照正确方式卸载,导致AutoCAD安装失败.楼主也查过网上关于如何解决AutoCAD安装失败的一些文章,是说删除几个AutoCAD文件和AutoCAD软件注册表就可以解决A ...

  6. CAD安装失败怎样卸载重新安装CAD,解决CAD安装失败的方法总结

    技术帖:CAD没有按照正确方式卸载,导致CAD安装失败.楼主也查过网上关于如何解决CAD安装失败的一些文章,是说删除几个CAD文件和CAD软件注册表就可以解决CAD安装失败的问题,实际的情况并没有这么 ...

  7. Ubuntu apt 卸载详解

    一.apt-get remove packagename ​ 该命令将移除与packagename相关联的所有二进制文件,但是不会移除与之相关联的配置文件或数据文件(configuration or ...

  8. MySQL通过安装包提供的卸载功能卸载

    你也可以通过安装向导程序进行MySQL8.0服务器程序的卸载. ① 再次双击下载的mysql-installer-community-8.0.26.0.msi文件,打开安装向导.安装向导会自动检测已安 ...

  9. 【翻译】WF从入门到精通(第六章):加载和卸载实例

    上一篇:[翻译]WF从入门到精通(第五章):workflow跟踪 学习完本章,你将掌握:     1.理解工作流实例为什么要卸载和重新加载及其时机     2.理解工作流实例为什么要持久化及其时机   ...

最新文章

  1. linux 查看锁机时间,3分钟短文|Linux 登陆痕迹查看,last 锁定所有可疑对象
  2. 加密货币支付卡公司与BCH达成合作
  3. 他用波士顿动力机器狗拉人力车!网友:这是我见过最蒸汽朋克的事情
  4. Mac配置Java环境变量等
  5. Android NDK之静态/动态注册Native方法
  6. 李宏毅老师ML_HW1——PM2.5预测
  7. php模板引擎smarty,[PHP]模板引擎Smarty介绍
  8. BM:我离开EOS的报道被夸大了 期待与社区合作
  9. java异常处理语句是,java 异常处理
  10. 2.1 - 递归练习题
  11. bzoj4498: 魔法的碰撞
  12. Photoshop插件-删除亮调通道蒙板-脚本开发-PS插件
  13. 触摸式开关简单入门教程
  14. 基于IMS的VoLTE业务
  15. 移动硬盘读不出来的问题
  16. linux系统性能监控--内存利用率
  17. 前传(1):Kafka 的前生今世
  18. 用python实现成绩录入
  19. 请详细解释下小波去噪的原理
  20. 东软Unieap平台

热门文章

  1. Docker学习总结(28)——Docker 容器健康检查机制
  2. linux dd 光标在闪,linux dd详解
  3. css帧动画点击执行一次_CSS动画深入浅出
  4. goldengate简单配置
  5. 全面理解Unity加载和内存管理机制之二:进一步深入和细节
  6. What's the difference between Unicode and UTF-8?
  7. OPENSSL编程 第二十章 椭圆曲线
  8. XenApp/XenDesktop 7.11 对于HDX 3D pro的2点增强
  9. tomcat 内存调整
  10. 设置本地yum源优先