Verwenden Sie "größer oder gleich" oder "größer als"
Ich mich erinnere aus der C-Tage, die wir wurden aufgefordert,
i > -1
statt
i >= 0
wegen der Leistung.
Tut dies noch immer gelten in C# .NET-Welt? Was sind die Auswirkungen auf die Leistung, die eine über die andere mit den heutigen Compilern? also Ist der compiler schlau genug, um diese zu optimieren für Sie?
(Nebenbei versuchen Sie, und geben Sie die Frage "verwenden Sie" > >=" in das Frage-Feld auf Stack Overflow und sehen, was passiert.)
InformationsquelleAutor Guy | 2008-10-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es gibt keine performance-Probleme, die im Zusammenhang mit Vergleichsoperatoren. Und jeder gute compiler würde etwas optimieren diese triviale sowieso.
Ich bin nicht sicher, wo Sie bekam den Vorschlag, "ich > -1" statt "ich >= 0". Auf der x86-Architektur, es macht keinen Unterschied, welches Sie verwenden: entweder Fall dauert genau zwei Anweisungen... man vergleichen, und eine zum springen:
Auf den meisten RISC-Architekturen, die ich kenne, "ich >= 0" kann tatsächlich schneller sein, da es in der Regel einen dedizierten zero registrieren, und "ich > -1" erfordern das laden einer Konstante. Zum Beispiel, MIPS nur eine < Unterricht (kein <=). Hier ist, wie die beiden Konstrukte werden würde (naiv!) ausgedrückt in MIPS-Assembler:
So, in der naiven, Allgemeinen Fall, es wird tatsächlich eine Anweisung schneller zu tun "ich >= 0" auf MIPS. Natürlich, RISC-code ist so stark optimierbare, dass ein compiler würde wahrscheinlich ändern diese Anweisung Sequenzen, fast jenseits der Anerkennung 🙂
So... die kurze Antwort ist Nein, Nein, Nein, Nein Unterschied.
(no no no, no difference) = !(!(!(!difference))) = !(!difference)) = difference
😉schwer zu argumentieren. Jetzt bin ich irgendwie versucht, fügen Sie eine 5. "Nein" 😛
InformationsquelleAutor Dan Lenski
Ganz abgesehen von der Tatsache, dass jeder anständige compiler macht das richtige, und abgesehen von der Tatsache, dass in modernen Architekturen es gibt keinen Geschwindigkeits-Unterschied zwischen
>
und>=
Vergleiche, das größere Bild sagt, dass dies ein "micro-Optimierung" , nicht auf Laufzeit-Leistung in der überwiegenden Mehrzahl der Fälle.Im Falle von vergleichen, die es in der Regel nicht auf die Lesbarkeit auswirken, egal welchen Weg Sie es schreiben, aber es gibt Gelegenheiten, wenn Kommissionierung eine Grenze über die anderen klarer ist: z.B.,
versus
Ich weiß nicht, über Sie, aber ich würde pick-option 1 jeden Tag. 🙂 In Fällen, die nicht spürbar auf die Leistung auswirken, wie diese, die mehr lesbar option gewinnen sollte.
Beachten Sie, dass, wenn str.size() gibt ein unsigned Menge, die zwei Aussagen oben sind nicht gleichwertig. Insbesondere die letztere Aussage wird nie true ausgewertet, wenn str.size() ist null. Ich habe zu Zeiten von solchen code, obwohl ich in der Regel fügen Sie einen expliziten typecast nach unsigned: wenn die Größen sind "kurze", "wenn (Länge > (unsigned short)(str.size-1))" würde helfen, deutlich machen, dass der code würde erwarten, dass das einwickeln Verhalten.
InformationsquelleAutor Chris Jester-Young
Gibt es eine sehr ähnliche Frage (keine Kritik impliziert - wie Sie sagen, die Suche nach Symbolen ist schwierig) hier: "Sollte man mit
<
oder<=
in einer for-Schleife"(Ja, ich bin zufällig in der Lage, es leicht finden, wie ich habe viele upvotes auf meine Antwort...)
Im Grunde tun, was die meisten lesbar. Den Tag, den jemand richtig errät, dass eine änderung Weg von den meisten lesbarer form lösen, ein performance-problem (ohne die Hilfe von einem profiler) ist der Tag, den ich aufhören zu reden, über die Leistung 🙂
InformationsquelleAutor Jon Skeet
Nein, Sie müssen nicht, dies zu tun mehr. Ja, die Compiler haben viel klüger geworden und die zwei Ausdrücke haben keine performance-Unterschiede.
Klingt wie eine Programmierung urbane Legende
InformationsquelleAutor Epaga
Sind Sie sicher? Ich habe mit Computern geht zurück zu den frühen '70' s (ja, auf meines Vaters Knie...), und ich habe noch nie eine CPU, die nicht Prozess - >= genauso schnell wie >. (BH-Zweig "Hoch" vs. BNL-Zweig "Nicht tief" in IBM360 sprechen).
Ich denke, dass ist ein weit verbreiteter Mythos. Ich habe gehört, dass es von Kollegen gesehen und im internet ein paar mal auch in den letzten Jahren. Auch ohne compiler-Optimierung entfernt der Unterschied, das ist eine riesige Verschwendung von Aufwand zu sparen, eine cpu-Operation.
Wie Sie sagen - es war wohl etwas, dass ich falsch war zu - vielen Dank.
InformationsquelleAutor James Curran
Könnte wahr gewesen sein, für einige schattige scripting-Sprachen, die brechen ein >= in 2 Vergleiche, aber wer Sie dazu ermutigt, zu verwenden, die für die C... naja... man sollte wohl versuchen schwer zu vergessen alles, was Sie jemals erzählt Sie.
InformationsquelleAutor Gerald
Das erinnert mich an die Empfehlung ++i statt i++ pre-Inkrement vs. post-Inkrement), denn es war angeblich eine Anweisung schneller. (Ich habe vergessen, wo ich ursprünglich Lesen über dieses, aber es war wohl C/C++ - Benutzer' im Journal oder in Dr. Dobb ' s Journal, aber ich kann nicht scheinen zu finden, ein web-Verweis.)
Ich bezweifle ernsthaft, dass > oder >= schneller oder langsamer; stattdessen schreiben Sie Ihren code für Klarheit.
Als seitliche Anmerkung, ich entwickelte eine Vorliebe für die Prä-Inkrement - (++i) operator, auch wenn der Grund nun möglicherweise veraltet.
InformationsquelleAutor Ryan
Für größer als null ist, muss es zwei Prüfungen. Es wird geprüft, ob die negativ-bit ist ausgeschaltet, und es wird geprüft, ob das zero-bit ausgeschaltet ist.
"Für" größer als oder gleich null ist, es hat nur zu prüfen, ob das negativ bit ausgeschaltet ist, weil wir don ' T Pflege wenn das zero-bit on oder off ist.
InformationsquelleAutor Scott Renz