パフォーマンスとメモリ使用量の観点から、どちらが優れているのでしょうか。
特定の関数に必要なパラメーターのみを渡すか、30個のプロパティを持つオブジェクトを渡すために同じパラメーターを渡しますが、関数はそのうちの3つを使用しますか?
パフォーマンスとメモリ使用量の観点から、どちらが優れているのでしょうか。
特定の関数に必要なパラメーターのみを渡すか、30個のプロパティを持つオブジェクトを渡すために同じパラメーターを渡しますが、関数はそのうちの3つを使用しますか?
パフォーマンスに基づいてこれを決定するべきではありません。パフォーマンスの違いはごくわずかで、無視できます。(しかし、あなたの質問に答えるために、それが参照型である場合、オブジェクトの受け渡しはより速くなります;大きなオブジェクトが値型である場合、パラメーターの受け渡しはより速くなります。)
これは、コードの意味に基づいて決定する必要があります。メソッドが30個のプロパティを持つオブジェクトに論理的に関連している場合、メソッドがオブジェクトを取得することは理にかなっています。また、メソッドへの将来の変更で、より多くのプロパティにアクセスする必要があるかどうかを検討することもできます。
メソッドがオブジェクトと論理的に無関係であり、渡す3つの値がメソッドの単なる情報である場合は、それらを別々のパラメーターとして渡す必要があります。また、メソッドを呼び出す将来のコードが、その特定のオブジェクトからの3つのプロパティとは異なる値を渡したいかどうかについても考慮する必要があります。
インライン化されていないメソッドを呼び出すと、引数として渡す変数は、実際には、呼び出されたメソッドの仮パラメータスロットメモリに物理的にコピーされます。これにより、スタックメモリ操作が発生し、パフォーマンスが低下します。引数を最小化する方が高速です。
それはすべて、値または参照で渡すかどうかによって異なります。一般的なパラメーター(int、float、double、bool)はすべて値で渡されます。それらがコピーされることを意味します。オブジェクトを渡すと、4バイトまたは8バイトの長さの関数へのオブジェクト(参照)へのポインタのみが「送信」されます。
多くのパラメータがある場合は、オブジェクトを渡す方が効率的です。
それは多くの要因に依存するかもしれません...
一般に、メソッド引数を最小化することは「良いこと」ですが、依存関係を課す可能性があるため、データ構造とコードが重要になります。
また、通常、パフォーマンスは最も重要性の低いコードメトリックの1つであるため、時期尚早の最適化を避け、コードの意味、読み取り可能性、保守性に重点を置いてください。パフォーマンスの問題がある場合、これがボトルネックになるとは思えません。
ローカル操作の場合は、参照のみであるため、オブジェクトを渡す方が適切です。ただし、オブジェクトをネットワーク経由で渡したい場合は、オブジェクトが完全にシリアル化され、サイズが大きくなります。