2016-07-22 6 views
2

Normalerweise verwende ich so etwas wie diese:Lohnt es sich, vor der Zuweisung auf Wert zu prüfen?

if(!variable.Equals(value)) 
{ 
    variable = value; 
} 

ich gelernt wurde, dies zu tun, aber ich frage mich nur, wenn es wert ist. Was sind die Kosten des Vergleichs vs Zuweisung? Ich denke, es ist nicht, aber ist C# irgendwie für die Operation der Zuweisung der gleichen Daten an die Variable optimiert?

Dank

+0

Ich würde vermuten, die Zuordnung ist schneller – Candide

+0

@KaeL es ist klar für Eigenschaften, wegen der recht häufige Implementierung von INotifyPropertyChanged Sie nicht unnötige Ereignisse auslösen möchten, ist diese Frage etwas anders – Qerts

Antwort

2

Die Vergleichsoperation ist für CPU schwieriger und dauert ein wenig mehr Zeit als Zuweisungsoperation.

Nur Zuweisung ist schneller als nur Vergleich, aber wenn variable ungleich value ist, werden Sie zwei Operationen ausführen - Vergleich und Zuordnung - mehr Zeit.

So Zuordnung ohne Vergleich wird noch schneller ausgeführt werden, wenn variable zu value gleich ist:

variable = value; 
-1

Es verdient durch nur, wenn der Wert von varible arleady value ist und Sie möchten super schnell und optimiert haben Code . Aber meiner Meinung nach wird der Gewinn unbemerkbar sein. Sie sollten variable = value; verwenden und es funktioniert gut und der Code wird klarer.

1

Die Zuweisung Operation selbst ist sehr billig (schnell). Die Dereferenzierung der Variablen kann teuer sein. Zum Beispiel würde product[a.f() + 3].age = 2; eine Menge Berechnung durchführen, um den Ort des gewünschten age zu erreichen. In Ihrem Fall führen Sie die gleiche Dereferenzierung in Ihrem if Zustand durch. Es gibt also keinen Vorteil beim Testen vor dem Zuweisen. Comparison bedeutet "Subtraktion und Check Zero Flag" und beinhaltet das Lesen des Wertes der Variablen aus dem Speicher. Zuweisung bedeutet das Schreiben eines Wertes in den Speicher. Das Lesen und Schreiben in den Speicher ist äquivalent. Compiler verwenden meines Wissens diesen Optimierungstrick nicht.

Verwandte Themen