9

メソッドを非静的にしてインスタンスメンバーを介して同じ値にアクセスするよりも、静的メソッドに引数として引数を渡す方が速い場合はいつですか。メソッドがこれらのメンバーに読み取り専用でアクセスするとします。

他のすべての条件が同じであれば、静的メソッドの呼び出しはインスタンス メソッドの呼び出しよりわずかに高速です。

他のすべての条件が同じであれば、引数なしでメソッドを呼び出すと、引数付きでメソッドを呼び出すよりもわずかに高速です。

検討:

private Thing _thing;

void DoTheThing()
{
    _thing.DoIt();
}

この同等のコードに対して:

private Thing _thing;

// caller's responsibility to pass "_thing"
static void DoTheThing(Thing thing)
{
    thing.DoIt();
}

この種の最適化が実際に価値を追加する現実世界の状況は考えられませんが、思考実験として (この種のことについて議論したい人向け)、本当に利点があるのでしょうか? もしそうなら、いくつの引数 (どのタイプなど) がバランスを逆に傾けますか?

これを考慮して、他の要因はありますか?たとえば、静的メソッドは_thing、フィールドではなくローカル変数としてアクセスします。

4

3 に答える 3

6

私が考えることができるパフォーマンス上の利点が 1 つあります(非仮想メソッドの場合): 静的メソッドは、(NullReferenceException適切な場所で a をスローするために) 最初に null の参照をテストする必要はありません。

現時点では利点はないと思いますが、可能性はあります。ただし、特定の例に適用されるかどうかはわかりません。実際に値を使用したい場合にどのように適用されるかはわかりません。

于 2009-10-15T16:52:25.797 に答える
0

あなたの場合(コードサンプルは Thing クラスにあると想定しています)、静的と非静的には速度の違いはまったくありません。これはあなたのリンクからのものです:

  • 0.2 0.2 インライン静的呼び出し
  • 0.2 0.2 この inst 呼び出しをインライン化

したがって、速度を上げるために静的にすることにはまったく意味がありません。

また、リンクされたページで提供される値は .Net 1.1 のものであり、かなり古くなっていることも考慮してください。

于 2009-10-15T16:55:51.053 に答える
0

静的メソッドとインスタンス メソッド間のパフォーマンスの統計についてはよくわかりません。

ただし、静的メソッドにするかインスタンスメソッドにするかは、オブジェクト設計に基づいて判断する必要があると思います。メソッドを呼び出してもオブジェクトの状態が変更されない場合は、そのメソッドを静的メソッド (型の特定のインスタンスではなく、型のメソッド) にする必要があります。

于 2009-10-15T19:00:27.757 に答える