1

だから私はこの記事C# Overloadsを読みました。これは、オーバーロードされたメソッドを使用して複雑さを解消し、パフォーマンスを向上させることができると述べており、次の例を提供しています。

システムを使用する;

class Program
{
    public static void Main()
    {
    ShowString(string.Empty);
    ShowString("Category");
    }

    static void ShowString(string value)
    {
    if (value == string.Empty)
    {
        Console.WriteLine("Popular");
    }
    else
    {
        Console.WriteLine(value);
    }
    }
}

次に、オーバーロードを使用して書き換えます。

using System;

class Program
{
    public static void Main()
    {
    ShowString();
    ShowString("Category");
    }

    static void ShowString()
    {
    // Send default argument to overload.
    ShowString("Popular");
    }

    static void ShowString(string value)
    {
    // We don't need an if check here, which makes
    // ... calling this method directly faster.
    Console.WriteLine(value);
    }
}

オーバーロード バリアントを使用すると、既定のパラメーター値を持つメソッドを使用するよりも優れたパフォーマンス結果が得られますか?

お気に入り:

using System;

class Program
{
    public static void Main()
    {
    ShowString();
    ShowString("Category");
    }

    static void ShowString(string value = "Popular")
    {
    // We don't need an if check here, which makes
    // ... calling this method directly faster.
    Console.WriteLine(value);
    }
}

またはコードの最後のブロックは、コードの最初のブロックと同等ですか?

4

2 に答える 2

2

オーバーロードは必ずしもパフォーマンスに関するものではありません。この場合、違いはごくわずかです。パラメータなしのバージョンは次のとおりです。

call, ldstr, call

パラメーターのあるバージョンは次のとおりです(値が指定されているかどうかに関係なく、デフォルトのパラメーターのバージョンを含みます)。

ldstr, call, ldarg_0, call

ただし、これはパフォーマンスに影響を与えません。ここでのパフォーマンスに関連する唯一のことは、コンソールへの呼び出しです。これは、他のすべてよりもはるかに低速です。

別名:実際に問題があると思わない限り、心配する必要はありません。

オーバーロードは、特定のメソッドで最適化されたバージョンが許可されている場合、たとえばボクシングを削除する場合に、より便利です。

于 2012-08-11T12:24:18.963 に答える
2

いいえ、最後の例は次のようにコンパイルされるため、デフォルトのパラメーターは少なくともオーバーロードと同じくらい高速です。

....
ShowString("Popular");
ShowString("Category");
....

2番目の例(オーバーロードを使用)は、(デバッグではなくリリース用にビルドされた場合)実行時にインライン化される可能性が高いため、パフォーマンスは最後の例(デフォルトのパラメーター)と同じになります。

のコストは実質的に何もないので、この例はちょっとばかげてvalue == string.Emptyいますが、それは要点を説明するのに役立つと思います。ただし、これはおそらくこの回答から得られる最も重要なビットです。時期尚早の最適化の前に、常により明確で保守性の高いコードを選択する必要があります。したがって、特定の状況で何を使用するかを決定する際には、ユーザビリティが最も重要な要素になります。

于 2012-08-11T12:24:26.977 に答える