问题标签 [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.
c# - DynamicILInfo.GetTokenFor(MethodHandle,RuntimeTypeHandle) 不适用于可变参数方法调用
考虑以下代码:
似乎这DynamicILInfo.GetTokenFor(MethodHandle,RuntimeTypeHandle)
不适用于可变参数方法调用(TestMethodVarArgs
上面代码中的调用)。如果我执行动态方法,它会给出“JIT 编译器遇到内部限制”异常。
这是一个错误吗?局限性?有没有解决的办法?
c# - 防止 DynamicMethod VerificationException - 操作可能会破坏运行时
我正在使用 IL 生成创建一个简单的反序列化器方法,该方法从 Lucene 文档中取出字符串并设置引用类型对象 (POCO) 的属性或字段。
每当我尝试运行生成的方法时,都会收到 VerificationException 错误。关于此错误还有其他问题,其中一些与 DynamicMethods 有关,但据我所知,我遇到的问题是不同的。
尽管该方法将来会变得更加复杂,但我现在只是在进行字符串分配。我尝试动态创建的方法将如下所示:
PocoObject 看起来像这样:
我试图完全复制从编译时代码生成的 IL(甚至是不必要的位),它看起来像这样:
我已经设法将 DynamicMethod 保存到磁盘上的程序集中,检查了它,这正是它带来的。逐行它与编译时方法IL相同。
然而,在执行动态方法时,会抛出上述错误。有谁知道我该如何解决这个问题?
注意:如果有人想仔细查看,我在 GitHub 上有源代码。IL 生成代码在 LukeMapper.cs:GetDumbDeserializer() 中(第 133 行)
感谢所有帮助!谢谢!
编辑:所以我简化了 IL 生成代码,它基本上如下:
我根据 kvbs 的评论添加了il.DeclareLocal(type)
(其中类型是 PocoObject),但我不确定我是否将它放在正确的位置(或者它是否重要)。
c# - 为什么这个 DynamicMethod (ldarg.1, newobj, ret) 会触发 VerificationException?
我有一个将构造函数包装在动态工厂方法中的方法:
但是,以下代码会VerificationException
在.Invoke(…)
:
如果我替换,则不会引发异常ldarg.1
;newobj <ctor>
,ldnull
所以问题肯定是由这两条IL指令引起的。进一步的实验表明,错误在于ldarg.1
。(对于上面的具体示例,我已将其替换为 a ldstr <string>
。)
有人看到这些 IL 指令有什么问题吗?
.net - 动态方法和函数代表
我有一个看起来像这样的类:
现在我想使用DynamicMethod
该类来发出创建ClassWithFuncConstructor
类实例所需的代码,如下所示:
如果我们看一下为这个原型编译的代码(来自 LinqPad),我们可以看到它创建了另一个方法,它是函数委托的主体,然后将指向该方法的指针作为构造函数参数传递。
问题是如何使用类来做到这一点DynamicMethod
?我需要创建一个新的匿名方法,也<DynamicMethodPrototype>b__0:
就是我可以将对该方法的引用传递给ClassWithFuncConstructor
类的构造函数。
这甚至可能与DynamicMethod
班级有关吗?
grails - Grails addTo 和 removeFrom 动态方法性能
我一直在使用 Grails addTo 和 removeFrom 动态方法,它们很棒,通常我以下列方式使用它们
作为一个曾经在 java 上工作的人,我将这段代码可视化为以下三个步骤
- 运行选择查询以获取 quizInstance
- 运行选择查询以获取问题
- 运行插入查询以在 QUIZ_QUESTION 表中插入问题
我确实看到第三步只需要 quiz id 和 Question id 然后为什么要执行前两个步骤。是否有一种“addTo”类型的静态方法,我可以用Quiz.addToQuestionAndQuiz(questionId,QuizId)
来说如果我假设事情将在数据库方面进行的方式有误,请纠正我。
还有一种方法可以直接使用 addTo 方法添加值列表,还是必须使用 for 循环?
.net - 向 CLR 的 DynamicMethod 添加状态的最简单方法是什么?
我正在使用 DynamicMethod 进行一些代码生成,我有一个问题可以通过添加一个小状态来轻松解决,比如一个字段。不幸的是,我无法将此状态推送到方法的参数之一中,所以我基本上需要关闭像这个小 lambda 这样的本地:
最简单的方法是什么?
c# - MSTest 爬取网站的动态方法
我正在尝试创建一个 MSTest 来抓取网站。我希望它是动态的,所以我可以将它投入到我们任何网站的构建中。这基本上是在推送到暂存环境之前进行测试的一个步骤。它检查断开的链接和丢失的资源。我们的单元测试目前在 MSTest 中完成。我们正在使用 Bamboo 进行自动化构建和测试。它有一个很好的结果格式。我希望能够将每个项目视为带有详细信息的测试。这本身就很容易。我拥有抓取网站所需的所有代码。
如何动态创建具有属性 TestMethod 的方法并将其包含在测试中?眼下,我要找的四类资源都有一个测试方法,所以有四种测试方法。我想测试每个独特项目的方法。
我一直在研究 DynamicMethod,但我认为这不会让我到达我想去的地方。
c# - DynamicMethod is much slower than compiled IL function
I wrote a simple object copier that copies public properties. I can't figure out why the Dynamic method is a lot slower than the c# version.
Durations
C# method : 4,963 ms
Dynamic method : 19,924 ms
Note that - as I run the dynamic method before starting the stopwatch - the duration do not include the compilation phase. I run that in Debug and Release mode, in x86 and x64 mode, and from VS and from the command line with roughly the same result (dynamic method is 400% slower).
From what I can debug the two methods have the same IL code.
I applogize if you read this twice. I posted this originally in: http://www.codeproject.com/Answers/494714/Can-27tplusfigureplusoutpluswhyplusthisplusDynamic but did not get all the answers I hoped.
edited 17 nov 2012 15:11:
.net - 是否可以将 Reflection.Emit 用于操作码 stelem.any 和 ldelem.any?
所以,我最近做了一些实验,发现 Reflection.Emit 似乎并不支持 ECMA 规范中的所有操作码。缺少 3 个操作码:
ldelem.any
stelem.any
no.
(字首)
反射 API 是否不支持这些操作码,或者有什么方法可以生成它们?
vb.net - 动态方法访问冲突,仅在运行 32 位时
我有以下代码用于创建动态方法来调用我的 VB.net 应用程序中的属性的 Set 方法,使用 .NET 3.5(无法切换到 Lambda 表达式样式)。使用此处发布的示例,我添加了该函数,因为它不适用于Int64
属性,主要是如果使用常规调用它int
,取消装箱操作会导致 Invalid Cast 错误。所以我添加了代码来处理这个问题,但现在我遇到了一个新问题。在 64 位下运行时一切正常,但是一旦我更改为 32 位进程,调用委托的Int64
属性会导致AccessViolationException
, 尝试读取或写入受保护的内存。其他类型,如字符串,似乎工作正常。请参阅下面的代码,我做错了什么?