問題タブ [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) が vararg メソッド呼び出しに対して機能しない
次のコードを検討してください。
vararg メソッドの呼び出し (上記のコードDynamicILInfo.GetTokenFor(MethodHandle,RuntimeTypeHandle)
の への呼び出し) では機能しないようです。TestMethodVarArgs
動的メソッドを実行すると、「JIT コンパイラで内部制限が発生しました」という例外が発生します。
これはバグですか?制限?これを回避する方法はありますか?
c# - DynamicMethodVerificationExceptionの防止-操作によりランタイムが不安定になる可能性があります
私はIL生成を使用して、Luceneドキュメントから文字列を取り出し、参照型オブジェクト(POCO)のプロパティまたはフィールドを設定する単純なデシリアライザーメソッドを作成しています。
生成されたメソッドを実行しようとすると、VerificationExceptionエラーが発生します。このエラーに関して他にも質問があり、そのうちのいくつかはDynamicMethodsに関係していますが、私が抱えている問題とは異なります。
operation-could-destablize-the-runtime-and-dynamicmethod-with-value-types
msil-operation-could-destabilize-the-runtime-exception
この方法は将来さらに複雑になりますが、今は文字列の割り当てを行っているだけです。私が動的に作成しようとしているメソッドは、次のようになります。
PocoObjectは次のようになります。
コンパイル時のコードから生成されたILを正確に(不要なビットも)複製しようとしましたが、次のようになります。
DynamicMethodをディスク上のアセンブリに保存して検査しましたが、これがまさにその結果です。行ごとに、コンパイル時のメソッドILと同じです。
それでも、動的メソッドを実行すると、上記のエラーがスローされます。誰かが私がこれを修正する方法を知っていますか?
注:誰かが詳しく調べたい場合は、GitHubにソースコードがあります。IL生成コードはLukeMapper.cs:GetDumbDeserializer()にあります(133行目)
すべての助けに感謝します!ありがとう!
編集:それで私はIL生成コードを単純化しました、そしてそれは本質的に次のとおりです:
il.DeclareLocal(type)
kvbsのコメントごとに(typeはPocoObject)を追加しましたが、適切な場所に配置しているかどうか(または重要かどうか)はわかりません。
c# - この DynamicMethod (ldarg.1、newobj、ret) が VerificationException をトリガーするのはなぜですか?
動的ファクトリ メソッドでコンストラクターをラップするこのメソッドがあります。
ただし、次のコードは に をスローしVerificationException
ます.Invoke(…)
。
を置き換えても例外はスローされませんldarg.1
。newobj <ctor>
したがって、ldnull
問題はこれら 2 つの IL 命令によって引き起こされたに違いありません。さらなる実験は、エラーが にあることを示唆していますldarg.1
。ldstr <string>
(上記の特定の例では、これを a に置き換えました。)
これらの IL 命令の何が問題なのか、誰かわかりますか?
.net - DynamicMethodとFunc代表者
私は次のようなクラスを持っています:
次に、クラスを使用して、次のようなクラスDynamicMethod
のインスタンスを作成するために必要なコードを出力します。ClassWithFuncConstructor
このプロトタイプ用にコンパイルされたコード(LinqPadから)を見ると、関数デリゲートの本体である別のメソッドが作成され、そのメソッドへのポインターがコンストラクターパラメーターとして渡されていることがわかります。
DynamicMethod
問題は、クラスを使用してこれをどのように行うことができるかということです。<DynamicMethodPrototype>b__0:
そのメソッドへの参照をClassWithFuncConstructor
クラスのコンストラクターに渡すことができるように、新しい匿名メソッド(別名)を作成する必要があります。
DynamicMethod
これはクラスでも可能ですか?
grails - Grails addTo および removeFrom 動的メソッドのパフォーマンス
私は Grails の addTo および removeFrom 動的メソッドを使用してきましたが、それらは素晴らしいものです。通常、次の方法で使用します
以前Javaで働いていた人である私は、このコードを次の3つのステップとして視覚化します
- 選択クエリを実行して quizInstance を取得する
- 選択クエリを実行して質問を取得する
- 挿入クエリを実行して QUIZ_QUESTION テーブルに質問を挿入します
3 番目のステップではクイズ ID と質問 ID のみが必要であり、最初の 2 つのステップを実行する理由がわかりました。私が言うために使用できる「addTo」の種類の静的メソッドはありQuiz.addToQuestionAndQuiz(questionId,QuizId)
ますか? データベース側で物事が進む方法を想定するのが間違っている場合は、修正してください。
また、addTo メソッドを使用して値のリストを直接追加する方法はありますか、それとも for ループを使用する必要がありますか?
.net - CLRのDynamicMethodに状態を追加する最も簡単な方法は何ですか?
DynamicMethodを使用して小さなコード生成を行っていますが、フィールドなどの小さな状態を追加することで簡単に解決できる問題があります。残念ながら、この状態をメソッドのパラメーターの1つにプッシュすることはできないため、基本的に、この小さなラムダのようなローカルを閉じる必要があります。
これを行う最も簡単な方法は何ですか?
c# - Web サイトをクロールするための MSTest 動的メソッド
Web サイトをクロールする MSTest を作成しようとしています。動的にしたいので、サイトのビルドに投げ込むことができます。これは基本的に、ステージング環境にプッシュする前にテストするためのステップです。リンク切れや不足しているリソースをチェックします。現在、単体テストは MSTest で行われています。自動化されたビルドとテストには、Bamboo を使用しています。結果の優れた形式があります。各アイテムをテストとして詳細に表示できるようにしたいと考えています。それ自体は簡単です。Web サイトをクロールするために必要なすべてのコードがあります。
その場で属性 TestMethod を使用してメソッドを作成し、それをテストに含めるにはどうすればよいですか? 現在、探している 4 種類のリソースのテスト メソッドがあるので、4 つのテスト メソッドがあります。ユニークなアイテムごとにメソッドをテストしたい。
私はDynamicMethodを見てきましたが、それが私が望むところに私を連れて行ってくれるとは思いません.
c# - DynamicMethodは、コンパイルされたIL関数よりもはるかに低速です
パブリックプロパティをコピーする単純なオブジェクトコピー機を作成しました。Dynamicメソッドがc#バージョンよりもはるかに遅い理由がわかりません。
期間
C#メソッド:4,963ミリ秒
動的メソッド:19,924ミリ秒
ストップウォッチを開始する前に動的メソッドを実行するため、期間にはコンパイルフェーズが含まれないことに注意してください。これをデバッグおよびリリースモード、x86およびx64モード、VSおよびコマンドラインから実行すると、ほぼ同じ結果になります(動的な方法は400%遅くなります)。
私がデバッグできることから、2つのメソッドは同じILコードを持っています。
これを二度読んでくださったことをお詫び申し上げます。私はこれを最初にhttp://www.codeproject.com/Answers/494714/Can-27tplusfigureplusoutpluswhyplusthisplusDynamicに投稿しまし たが、期待したすべての答えが得られませんでした。
2012年11月17日編集15:11:
.net - オペコード stelem.any および ldelem.any に Reflection.Emit を使用することは可能ですか?
そのため、最近いくつかの実験を行ったところ、Reflection.Emit が ECMA 仕様のすべてのオペコードをサポートしていないことがわかりました。欠落している 3 つのオペコードがあります。
ldelem.any
stelem.any
no.
(プレフィックス)
これらのオペコードは、Reflection API でサポートされていないだけですか?それとも、それらを生成する方法などはありますか?
vb.net - 動的メソッドでのアクセス違反、32 ビット実行時のみ
.NET 3.5 を使用して、VB.net アプリのプロパティの Set メソッドを呼び出す動的メソッドを作成するための次のコードがあります (ラムダ式スタイルに切り替えることはできません)。ここに投稿された例を使用して、Int64
プロパティで機能しなかったため、関数に追加しました。主に、通常int
の unbox 操作で呼び出された場合、無効なキャストエラーが発生するためです。そのため、それを処理するコードを追加しましたが、新しい問題が発生しました。64 ビットで実行している場合はすべて正常に動作しますが、32 ビット プロセスに変更するとすぐに、Int64
プロパティのデリゲートを呼び出すと、AccessViolationException
保護されたメモリの読み取りまたは書き込みが試行されます。String のような他のタイプは、正常に動作するようです。以下のコードを参照してください。何が間違っていますか?