您现在的位置是:首页 >

技术主管和技术总监的区别 详解.NET中的动态编译技术[2]

火烧 2022-06-11 06:48:49 1036
详解.NET中的动态编译技术[2]   需要解释的是 这里我们在传递编译参数时设置了Ge erateI Memory为true 这表明生成的DLL会被加载在内存中(随后被默认引用入当前应用程序域) 在

详解.NET中的动态编译技术[2]  

技术主管和技术总监的区别 详解.NET中的动态编译技术[2]

  需要解释的是 这里我们在传递编译参数时设置了GenerateInMemory为true 这表明生成的DLL会被加载在内存中(随后被默认引用入当前应用程序域) 在调用GetTime方法时我们需要加入参数 传递object类型的数组并通过Reflection的InvokeMember来调用 在创建生成的Assembly中的对象实例时 需要注意用到的命名空间是你输入代码的真实命名空间 以下是我们输入的测试代码(为了方便 所有的代码都在外部输入 动态执行时不做调整)

using System;namespace Dynamicly{    public class HelloWorld    {        public string GetTime(string strName)        {            return  Wele + strName + Check in at + System DateTime Now ToString();        }    }}

  运行附件中提供的程序 可以很容易得到一下结果

  改进的执行过程

  现在一切看起来很好 我们可以编译代码并把代码加载到当前应用程序域中来参与我们的活动 但你是否想过去卸载掉这段程序呢?更好的去控制程序呢?另外 当你运行这个程序很多遍的时候 你会发现占用内存很大 而且每次执行都会增大内存使用 是否需要来饩稣飧鑫侍饽兀康比恍枰裨蚰慊岱⑾终飧龆鞲久挥茫倚枰葱械囊恍┐蟮挠τ没崛梦业?a class= channel_keylink href= //server chinaitlab / target= _blank >服务器crzay 不堪重负而疯掉的

  要解决这个问题我们需要来了解一下应用程序域 NET Application Domain是 NET提供的运行和承载一个活动的进程(Process)的容器 它将这个进程运行所需的代码和数据 隔离到一个小的范围内 称为Application Domain 当一个应用程序运行时 Application Domains将所有的程序集/组件集加载到当前的应用程序域中 并根据需要来调用 而对于动态生成的代码/程序集 我们看起来好像并没有办法去管理它 其实不然 我们可以用Application Domain提供的管理程序集的办法来动态加载和移除Assemblies来达到我们的提高性能的目的 具体怎么做呢 在前边的基础上增加以下步骤

lishixinzhi/Article/program/net/201311/14507  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码