问题标签 [dynamicmethod]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1809 浏览

c# - 使用 Reflection.Emit 的奇怪参数序列

我最近一直在看 Reflection.Emit。我写了一个简单的程序,它生成一个 DynamicMethod ,它简单地调用另一个具有相同参数的方法

当我运行此示例时,我希望它输出 1,2,3,4,5,6 但是,它输出 2,3,4,5,6,1

我不太清楚为什么......如果你们知道使用 Reflection.Emit 的任何好的资源,你能指出我那个方向吗?我一直在使用 Reflector 和 Emit AddIn。

干杯

罗汉

0 投票
3 回答
834 浏览

.net - 反射还是动态方法?

我在几个项目中使用过 NHibernbate,现在也了解了更多的 ORM。据我了解,NHibernate 在运行时使用映射文件将 Class 动态绑定到 Datalayer。

我的问题是,这种后期绑定是如何完成的?我的意思是,使用哪种方法,“反射”或“动态方法”?

如果它使用反射,是否有任何使用 DynamicMethod 的 ORM?并提供更好的性能?

0 投票
2 回答
1618 浏览

c# - 具有泛型类型参数的 DynamicMethod

是否可以使用泛型类型参数定义 DynamicMethod?MethodBuilder 类具有 DefineGenericParameters 方法。DynamicMethod 有对应的吗?例如,是否可以使用 DynamicMethod 创建具有像给定打击一样的签名的方法?

0 投票
1 回答
1029 浏览

c# - 如何将自定义属性添加到 DynamicMethod 生成的方法?

我在玩DynamicMethodExpression Trees ' CompilationDynamicMethod内部使用)。

然后我想知道是否有一种方法可以将自定义属性添加到生成的方法中。我用谷歌搜索了它,但我找不到方法。我知道可以使用 CodeDom,但我想使用DynamicMethod.

有人提到Type Descriptor,但我不确定它是否有帮助。

有谁知道一种为使用生成的方法定义自定义属性的方法DynamicMethod

0 投票
1 回答
2576 浏览

c# - 动态方法和输出参数?

如何为具有out-parameter 的委托定义 DynamicMethod ,像这样?

假设我只是想要一个在调用该方法时将a参数设置为null的方法。

请注意,我知道处理此问题的一种可能更好的方法是使该方法返回Action委托,但这只是较大项目的简化部分,并且所讨论的方法已经返回了一个值,我需要处理该out参数除此之外,还有这个问题。

我试过这个:

但是,我明白了:

del(out a);线。

请注意,如果我注释掉在堆栈上加载 null 并尝试将其存储到参数中的两行,则该方法将无异常运行。


编辑:这是最好的方法吗?

0 投票
1 回答
2899 浏览

c# - 好奇心:为什么 Expression<...> 在编译时比最小的 DynamicMethod 运行得更快?

我目前正在做一些最后的优化,主要是为了好玩和学习,并发现了一些让我有几个问题的东西。

首先,问题:

  1. 当我通过使用DynamicMethod构造内存中的方法并使用调试器时,在反汇编视图中查看代码时,有什么方法可以让我进入生成的汇编代码?调试器似乎只是为我跳过了整个方法
  2. 或者,如果这不可能,我是否可以以某种方式将生成的 IL 代码作为程序集保存到磁盘,以便我可以使用Reflector检查它?
  3. 为什么Expression<...>我的简单加法版本 (Int32+Int32 => Int32) 比最小的 DynamicMethod 版本运行得更快?

这是一个简短而完整的演示程序。在我的系统上,输出是:

我希望 lambda 和方法调用具有更高的值,但 DynamicMethod 版本始终慢约 30-50%(可能由于 Windows 和其他程序而有所不同)。有人知道原因吗?

这是程序:

0 投票
1 回答
469 浏览

c# - CIL 中的字符串生成器 (MSIL)

我正在尝试生成采用 StringBuilder 的代码,并将类中所有属性的值写入字符串。我有以下内容,但我目前在以下代码中得到“无效的方法令牌”:

有任何想法吗?提前致谢 :)

0 投票
2 回答
15017 浏览

c# - 动态方法的实际例子?

我想学习使用c#的动态方法及其实际示例。
动态方法和反射之间有什么关系吗?
请帮我。

0 投票
2 回答
1807 浏览

c# - ConstructorInfo.Invoke 的 DynamicMethod,我需要考虑什么?

我的问题是这样的:

如果我要构建一个DynamicMethod对象,对应一个ConstructorInfo.Invoke调用,当我可以保证正确的类型时,我需要实现什么类型的 IL 以处理所有(或大多数)类型的参数在我拨打电话之前要传入多少个参数?


背景

我正在进行 IoC 容器的第三次迭代,目前正在做一些分析,以确定是否有任何区域可以轻松节省大量使用时间。

我注意到的一件事是,当解析为具体类型时,最终我会使用ConstructorInfo.Invoke调用构造函数,并传入我已经计算出的参数数组。

我注意到调用方法有相当多的开销,我想知道其中大部分是否只是我所做的相同检查的不同实现。

例如,由于我拥有的构造函数匹配代码,要为我传入的预定义参数名称、类型和值找到匹配的构造函数,这个特定的调用调用不可能最终得到它应该能够的东西以正确的顺序、正确的类型和适当的值来处理,例如正确数量的参数。

在执行包含对我的 resolve 方法的一百万次调用的分析会话,然后将其替换为模仿 Invoke 调用的DynamicMethod实现时,分析时间是这样的:

  • ConstructorInfo.Invoke:1973 毫秒
  • 动态方法:93ms

这约占此分析应用程序总运行时间的 20%。换句话说,通过将 ConstructorInfo.Invoke 调用替换为具有相同功能的 DynamicMethod,我能够在处理基本的工厂范围服务时减少 20% 的运行时间(即,所有解析调用都以构造函数调用结束)。

我认为这是相当重要的,并且值得仔细研究在这种情况下为构造函数构建一个稳定的 DynamicMethod 生成器需要做多少工作。

因此,动态方法将接受一个对象数组,并返回构造的对象,我已经知道有问题的 ConstructorInfo 对象。

因此,看起来动态方法将由以下 IL 组成:

还有什么我需要考虑的吗?

请注意,我知道在“减少访问模式”下运行应用程序时创建动态方法可能不可用(有时大脑不会放弃这些术语),但在这种情况下,我可以很容易地检测到这一点并且只是像以前一样调用原始构造函数,开销和所有。

0 投票
3 回答
319 浏览

c# - 为什么用我自己的类的实例调用 DynamicMethod 会导致异常?

我通过在运行时使用Reflection.Emit. 实际上,我很惊讶到目前为止事情有多容易,但是我遇到了一些我无法猜测的事情,而且我在文档中找不到任何相关的东西。

我正在尝试创建一个简单地打印我定义的非常简单的类的函数。例如,如果我将代码更改为 print string,它可以工作,但是当我传递我的 class 的实例时它总是无法运行A

奇怪的是我可以注释掉我的函数体,但它仍然以TargetInvocationException. 它一定很简单,但我看不到发生了什么!

我做错了什么使这个引发异常?为什么这只发生在我的课程中?