c#

位置:IT落伍者 >> c# >> 浏览文章

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


发布日期:2022年06月15日
 
详解.NET中的动态编译技术[2]

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

using System;

namespace Dynamicly

{

public class HelloWorld

{

public string GetTime(string strName)

{

return Welcome + strName + Check in at + SystemDateTimeNowToString();

}

}

}

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

改进的执行过程

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

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

[] [] [] [] []

               

上一篇:详解.NET中的动态编译技术[1]

下一篇:详解.NET中的动态编译技术[3]