2

プロパティ値にアクセスするには、どちらが優れていますか?

こんな感じでアクセス

propertyobjA.objB.Prop1
propertyobjA.objB.Prop2

または変数に割り当てます

var objB = propertyobjA.objB;
then call objB.Prop1 and objB.Prop1

c# でパフォーマンスが向上するのはどれですか?

4

5 に答える 5

4

完全に正直に言うと、答えは 2 番目の方が速い可能性が高いですが、それが少しでも問題にならないことはほぼ保証できます。早すぎる最適化について考えすぎないように注意する必要があります。すべてのパフォーマンスの問題の 99% は、このような些細な問題ではなく、データベースへのアクセス頻度が高すぎるなど、より大きな問題に起因しています。2 つのケースにわずかな違いがあったとしても、これが地球上で最もタイム クリティカルなソフトウェアでない限り、重要なのは読みやすさ (この場合、どちらも読みにくいということではありません) であり、どちらが速いかではありません。

于 2012-08-16T14:43:06.827 に答える
1

これはパフォーマンス面で大きな違いはないと思います(2番目の選択肢は少し速いかもしれません)。しかし、これはパフォーマンスの問題(もしあれば)が発生する場所ではありません。

更新:考えてみると、の値はpropertyobjA.objB取得Prop1との間で変わる可能性がProp2あるため、2つの選択肢を同じコードと見なすことはできません。

于 2012-08-16T14:43:51.213 に答える
1

objB が何であるかによって異なります。何かを計算している場合 (実行すべきではないが、実行できる場合) はもちろん、それを値に割り当てるとパフォーマンスが向上します。

別の注意として、クラス間の結合を高くしているため、変数のサブプロパティに依存することは避ける必要があります。

于 2012-08-16T14:43:21.337 に答える
0

パフォーマンスへの影響は、プロパティゲッターの実装に大きく依存します。propertyObjA.objBたとえば、単純に次のように実装されている場合:

public Foo objB { get { return this._objB; } }

次に、それを2回呼び出すと、パフォーマンスへの影響はごくわずかになります。

ただし、同じプロパティが計算コストの高いものを実行した場合は、2番目の提案の方がパフォーマンスが向上します。

そうは言っても、フレームワークガイドラインでは、プロパティゲッターを使用して、計算コストがかかる可能性のある操作を非表示にするのではなく、代わりにメソッド呼び出しを使用する必要があると述べています。

public objB ComputeB ();
于 2012-08-16T14:44:05.870 に答える
0

C# などの高水準言語でコードを記述する場合は、そのようなことを気にする必要はありません。

C# や Java などの言語の最新のコンパイラは非常に洗練されており、コードに対してあらゆる種類の最適化を実行します。開発者としての最終結果は、特定の些細なコードを何らかの方法で記述しても、パフォーマンスに違いが見られないということです。コンパイラは最適な方法を選択します。

それ以外は好み次第です。複数のプロパティ アクセスを連鎖させたい場合は、それで問題ありません。コードの可読性を向上させるために中間結果を変数に割り当てたい場合は、それも問題ありません。

于 2012-08-16T14:47:09.840 に答える