10

パフォーマンスとメモリ使用量の観点から、どちらが優れているのでしょうか。

特定の関数に必要なパラメーターのみを渡すか、30個のプロパティを持つオブジェクトを渡すために同じパラメーターを渡しますが、関数はそのうちの3つを使用しますか?

4

5 に答える 5

15

パフォーマンスに基づいてこれを決定するべきではありません。パフォーマンスの違いはごくわずかで、無視できます。(しかし、あなたの質問に答えるために、それが参照型である場合、オブジェクトの受け渡しはより速くなります;大きなオブジェクトが値型である場合、パラメーターの受け渡しはより速くなります。)

これは、コードの意味に基づいて決定する必要があります。メソッドが30個のプロパティを持つオブジェクトに論理的に関連している場合、メソッドがオブジェクトを取得することは理にかなっています。また、メソッドへの将来の変更で、より多くのプロパティにアクセスする必要があるかどうかを検討することもできます。

メソッドがオブジェクトと論理的に無関係であり、渡す3つの値がメソッドの単なる情報である場合は、それらを別々のパラメーターとして渡す必要があります。また、メソッドを呼び出す将来のコードが、その特定のオブジェクトからの3つのプロパティとは異なる値を渡したいかどうかについても考慮する必要があります。

于 2012-12-02T09:47:30.113 に答える
4

インライン化されていないメソッドを呼び出すと、引数として渡す変数は、実際には、呼び出されたメソッドの仮パラメータスロットメモリに物理的にコピーされます。これにより、スタックメモリ操作が発生し、パフォーマンスが低下します。引数を最小化する方が高速です。

于 2012-12-02T09:45:03.383 に答える
2

それはすべて、値または参照で渡すかどうかによって異なります。一般的なパラメーター(int、float、double、bool)はすべて値で渡されます。それらがコピーされることを意味します。オブジェクトを渡すと、4バイトまたは8バイトの長さの関数へのオブジェクト(参照)へのポインタのみが「送信」されます。

多くのパラメータがある場合は、オブジェクトを渡す方が効率的です。

于 2012-12-02T09:46:58.303 に答える
0

それは多くの要因に依存するかもしれません...

  • たとえば、3つのプロパティが参照型か値型か-C#は「値渡し」言語であり、値型の場合は各割り当てまたは引数の受け渡し中にオブジェクト全体をコピーしますが、参照型の場合は参照のみをコピーし、全体はコピーしません。物体。
  • 一部のプロパティがたとえば遅延評価/作成されない限り、パフォーマンスはほぼ同じになります(ここでも、唯一の違いは値/参照のコピーです)。

一般に、メソッド引数を最小化することは「良いこと」ですが、依存関係を課す可能性があるため、データ構造とコードが重要になります。

また、通常、パフォーマンスは最も重要性の低いコードメトリックの1つであるため、時期尚早の最適化を避け、コードの意味、読み取り可能性、保守性に重点を置いてください。パフォーマンスの問題がある場合、これがボトルネックになるとは思えません。

于 2012-12-02T09:49:24.580 に答える
0

ローカル操作の場合は、参照のみであるため、オブジェクトを渡す方が適切です。ただし、オブジェクトをネットワーク経由で渡したい場合は、オブジェクトが完全にシリアル化され、サイズが大きくなります。

于 2012-12-02T09:46:25.797 に答える