我偶然发现一个简短的讨论最近在其他网站上有关C#运行时编译近日,同时寻找其他的东西,并认为这个想法很有趣。 你用过吗? 我试图确定如何/当一个人可以使用这一点,它解决了什么问题。 我会听取您如何使用它或在什么情况下是有意义很感兴趣。
非常感谢。
我偶然发现一个简短的讨论最近在其他网站上有关C#运行时编译近日,同时寻找其他的东西,并认为这个想法很有趣。 你用过吗? 我试图确定如何/当一个人可以使用这一点,它解决了什么问题。 我会听取您如何使用它或在什么情况下是有意义很感兴趣。
非常感谢。
通常情况下,我看到在您目前正在使用的反思,需要优化性能情况下,这种使用。
例如,而不是使用反射来调用方法X,你产生的动态方法,在运行时为你做这个。
您可以使用此脚本支持添加到您的应用程序。 对于例子看这里或这里 。
这是很容易可以发布您的内部对象框架对脚本的部分地区,所以你可以相对容易地添加一些应用程序有,例如VBA的Office相同的效果。
我见过生成动态代理(这个(运行时编译/使用System.Reflection.Emit类) 代码项目样本 )或优化反射电话(时间方面)的其他手段。
你可以使用它至少有一个案件是动态生成代码时。 例如,该框架在内部使用这个来动态生成XML序列化。 寻找到一类在运行后,它可以生成的代码序列化/反序列化类。 然后它编译它需要的代码和用户。 以相同的方式可以生成代码以处理任意的数据库表等,然后编译和加载生成的汇编。
好了,所有的C#代码运行时编译的,因为它是一个JIT(刚刚在时间)编译器。 我假设你是指Reflection.Emit的在飞行中创建类等。 下面是我在Xml-Rpc.Net库最近看到的一个例子。
我创建具有相同签名的XML-RPC服务的方法调用,例如C#接口
IMyProxy : IXmlRpcProxy
{
[XmlRpcMethod]
int Add(int a, int b);
}
然后在我的代码我呼吁类似
IMyProxy proxy = (IMyProxy)XmlRcpFactory.Create(typeof(IMyProxy));
这使用运行时代码生成创造一个全功能的代理我,这样我就可以使用它像这样:
int result = proxy.Add(1, 2);
这则处理XML-RPC调用我。 很酷。
我使用.NET运行时编译器服务在我的毕业论文。 基本上,它是关于在视觉上创建用于过程可视化,其作为C#代码生成,编译成一个组件某些图形组件,然后可以在目标系统上,而不被解释使用,使其更快和更紧凑。 而且,作为奖金,生成的图像可以被打包成非常相同的组件资源。
其他用途的,这是在Java中。 我有过使用一些数值算法来绘制一个潜在的昂贵的功能(仿佛又回到了大学),用户可以输入的应用程序。 我把输入的功能分为一类,编译并加载它,它当时可以相对快速执行。
所以,这是我的两个经验下,运行时代码生成是一件好事。
这是我用它是允许C#和VB代码,以卜用户特设运行。 他们可以输入的代码行(或两行),它会被编译,被加载到一个应用程序的域,和执行,然后卸载。 这可能心不是其使用的最好的例子,但它的一个例子没有-的少