1つのクラス/構造体を渡すことと複数のパラメーターを渡すこと
パフォーマンスの考慮事項について疑問に思っています。
2つのintパラメーターとオブジェクト参照を保持するクラスまたは構造体(どちらですか?)を呼び出すメソッドに渡す方がパフォーマンス的に優れているでしょうか、それともこれら3つを3つのパラメーターとして渡す方がよいでしょうか?
注:私はUnity3Dプラットフォームで開発しているため、一部の機能が従来の.NETとは異なる可能性があります
1つのクラス/構造体を渡すことと複数のパラメーターを渡すこと
パフォーマンスの考慮事項について疑問に思っています。
2つのintパラメーターとオブジェクト参照を保持するクラスまたは構造体(どちらですか?)を呼び出すメソッドに渡す方がパフォーマンス的に優れているでしょうか、それともこれら3つを3つのパラメーターとして渡す方がよいでしょうか?
注:私はUnity3Dプラットフォームで開発しているため、一部の機能が従来の.NETとは異なる可能性があります
を渡す場合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
、メソッドに分離されます)。
少なくとも考慮すべき点のいくつかを説明していると思いますが、私はあなたに決定的な答えを持っていません。より科学的なものが必要な場合は、おそらく測定する必要があります。
パラメータの量によって異なります。
10個のパラメーターがある場合、それを管理することは非常に困難になります(読みやすさとコード管理の観点)。これらすべてのパラメータをクラスにまとめて、そのクラスに合格することをお勧めします。
パフォーマンスの観点からは、少しオーバーヘッドが追加されますが、そのようなすべてのパラメーターを渡すよりも価値があります。
オブジェクトタイプのデータのみを渡す場合は、paramsを使用してみてください。
public static void myMethod(params object[] list)
{
// do something
}
任意の数のパラメーターを渡すことができます。
パフォーマンスが懸念される場合は、構造体を選択する必要があります。構造体は、クラスと比較して軽量であり、その背後に多くのデータ構造があります。