0

オブジェクトを別のオブジェクトに割り当てる場所があり、それらが等しい可能性が 50% ある場合、等しいかどうかのチェックは役に立ちますか?

たとえば、プロパティ変更イベントの発生を回避するために、プロパティ セッターで役立つ可能性があることは知っていますが、次の場合はどうなりますか?違いはありますか?

private SomeObject currentObject;
//assign only if objects are not equal
public void GetResults(SomeObject obj)
{
    if(currentObject!= obj)
    currentObject = obj;

    //....
}


//assign no matter what
public void GetResults(SomeObject obj)
{
    currentObject = obj;
    //....
}
4

3 に答える 3

1

「マイクロ最適化」を検討している場合は、直接割り当ての方がパフォーマンスが向上します。

だから私はこれに固執します

currentObject = obj;

等しいかどうかをチェックすると、それを比較するための別のオーバーヘッドが追加されます。実行する IL コードを追加するだけです。

しばらく前に、どちらが優れているかを確認するためにベンチマークを行ったところ、直接割り当ての方が優れていることが示されました。今のところ、興味のある人が測定して理解できるコードはありません。

于 2013-11-08T11:23:23.970 に答える
1

それは、オブジェクトの等価性をどのように定義するかに大きく依存します。

一部の (すべての) メンバーが一致する場合に 2 つのオブジェクトが等しいなど、カスタムの等値比較がある場合、そのオブジェクトへの共通の参照が必要な場合は、アプリのロジックに依存します。たとえば、メモリを節約できます。

それ以外の場合、同じオブジェクトであるかどうかだけに関心がある場合は、意味がありません。参照を割り当てるコストはごくわずかです。

于 2013-11-08T11:23:45.770 に答える
1

INotifyPropertyChanged を実装する場合など、何らかのイベントをトリガーする場合にのみ役立ちます。それ以外の場合は、IMHO は必要ありません。

http://msdn.microsoft.com/en-us/library/ms743695.aspx

于 2013-11-08T11:21:55.583 に答える