3

オブジェクトの存続期間中にいくつかの基本的な計算を変更する必要があります。

動的メソッドを作成し、それを呼び出す方法を知っていますdelegate.Invoke。ただし、静的メソッド呼び出しの2倍のコストがかかります。

既存の方法の中でCILを放出することは可能ですか?

あるメソッドが別のメソッドを呼び出し、別のメソッドが(一度に1つずつ)異なる本体を持つことができるとしましょう。

public void Worker()
{
    while(true)
    {
        int a = queueA.Dequeue();
        int b = queueB.Dequeue();

        int c = Calculate(a,b);
    }
}

int Calculate(int a, int b)
{
    // here goes dynamic code.
    // could be return a - b;
    // could be return b - a;
}

この例の計算ロジックは大幅に簡略化されていることに注意してください。

4

1 に答える 1

2

クラスがコンパイルされると、そのILを変更することはできなくなります。Reflection.Emitを使用すると、実行時にまったく新しいメソッドを動的に発行できます。ただし、既存のものを変更することはできません。

静的メソッド呼び出しの速度が必要な場合は、たとえばOOPが提供するさまざまなアプローチを検討できます。

于 2012-05-29T12:19:17.477 に答える