11

メソッドのコレクションを含むクラスがあり、プロパティよりもメソッドを使用することでパフォーマンスが向上するかどうか疑問に思っていました。

一部のメソッドはかなり複雑ですが、基本的にオブジェクトの IEnumerable コレクションを返しますが、その他のメソッドは単純なreturn values.Where(x => x.property == "comparison")Linq クエリです。

方法:

public IEnumerable<PenDataRow> ActivePens() => Pens.Where(x => x.Status == "Active");

財産:

public IEnumerable<PenDataRow> ActivePens => Pens.Where(x => x.Status == "Active");

それらをプロパティまたはメソッドとしてマークしたほうがよいでしょうか?

4

4 に答える 4

17

プロパティは内部でメソッドとして実装されるため、パフォーマンスの違いはまったくありません。プロパティとメソッドのどちらを選択するかのガイドラインはセマンティックです。

于 2012-09-04T15:26:35.457 に答える
3

プロパティは、特定の名前とメタデータを持つ 1 つまたは 2 つのメソッドです。

したがって、JIT インライン化の機会と同様に、オーバーヘッドは同じです。

于 2012-09-04T15:27:36.223 に答える
3

それ自体にはパフォーマンスの違いはありませんが、あなたのクラスのユーザーはそれを「期待」するかもしれないと私は主張します。つまり、 のようなプロパティは、 のようActivePensなメソッドよりも「軽量」であると認識される場合がありますGetActivePens()。より高価なものの値を取得するメソッドを作成しようとしています。それは非常に主観的です。

デバッガーへの影響もある可能性があります。デバッガーでクラスのプロパティにカーソルを合わせると、そのプロパティが呼び出され、ツールチップを表示するための高価な操作が発生する可能性があります。

于 2012-09-04T15:30:33.530 に答える
1

いいえ、パフォーマンスの向上はまったくありません。これらは、よりエレガントな方法でプライベート フィールドを公開するのに役立つメソッドでもあるためです。

于 2012-09-04T15:27:30.003 に答える