4

1つのクラス/構造体を渡すことと複数のパラメーターを渡すこと

パフォーマンスの考慮事項について疑問に思っています。

2つのintパラメーターとオブジェクト参照を保持するクラスまたは構造体(どちらですか?)を呼び出すメソッドに渡す方がパフォーマンス的に優れているでしょうか、それともこれら3つを3つのパラメーターとして渡す方がよいでしょうか?

注:私はUnity3Dプラットフォームで開発しているため、一部の機能が従来の.NETとは異なる可能性があります

4

4 に答える 4

8

を渡す場合class、最初に行う必要があるのはオブジェクトを作成することです。これは後でガベージコレクションする必要があります。通常は問題ありませんが、一部のUnityターゲットプラットフォームでは、これを大量に実行している場合は望ましくない可能性があります。

struct 通常通りに合格した場合は、構造体をコピーする必要があります。カプセル化について質問するのに十分な大きさである場合(つまり、いくつかのパラメーターを表す場合)、それはおそらく自明ではない大きさであり、特にいくつかのレイヤーを渡す場合は、常にコピーするのが面倒になる可能性があります。 。

個々のパラメータを渡すことはかなりよく知られており、大きな問題を引き起こすことはありません。4.0のオプションのパラメーターを使用すると、パラメーターを追加するのに苦労することは少なくなりますが、パラメーター(デフォルト値だけで)渡されます。

ユニティの興味深いオプションは、 struct by refを渡すことです。これは、コンテンツをコピーせず(通常はスタック上で作成した値への参照を渡すだけです)、ガベージコレクションを必要としないためです。

var args = new SomeArgs(123, "abc", 23.4F, false); // <=== a struct
SomeMethod(ref args);

ただし、最も有用なケースでは、これがあなたに大きな利益をもたらすとは思えません。

SomeMethod(123, "abc", 23.4F, false);

もちろん、パラメータをいくつかのレイヤーに渡す場合を除きます。その場合、コピーが不要であるという利点があります。ただし、注意してください。値は、呼び出しスタック内のレイヤー間で独立しなくなりました(渡されない通常のパラメーターはref、メソッドに分離されます)。

少なくとも考慮すべき点のいくつかを説明していると思いますが、私はあなたに決定的な答えを持っていません。より科学的なものが必要な場合は、おそらく測定する必要があります。

于 2012-06-04T07:09:01.020 に答える
1

パラメータの量によって異なります。

10個のパラメーターがある場合、それを管理することは非常に困難になります(読みやすさとコード管理の観点)。これらすべてのパラメータをクラスにまとめて、そのクラスに合格することをお勧めします。

パフォーマンスの観点からは、少しオーバーヘッドが追加されますが、そのようなすべてのパラメーターを渡すよりも価値があります。

于 2012-06-04T07:14:02.353 に答える
0

オブジェクトタイプのデータのみを渡す場合は、paramsを使用してみてください。

public static void myMethod(params object[] list)
    {
      // do something
    }

任意の数のパラメーターを渡すことができます。

于 2012-06-04T08:06:35.360 に答える
0

パフォーマンスが懸念される場合は、構造体を選択する必要があります。構造体は、クラスと比較して軽量であり、その背後に多くのデータ構造があります。

于 2012-06-04T08:24:56.973 に答える