Mein Chef hat mir gerade gesagt, dass er von einem Buch über schnelle VB6-Algorithmen erfahren hat und dass der kürzeste Weg zum Schreiben nicht unbedingt der schnellste ist (zB eingebaute Methoden sind manchmal viel langsamer als selbstgeschriebene, weil sie alle Arten von Überprüfungen durchführen) Unicode-Konvertierungen, die in Ihrem Fall nicht notwendig sind).
Nun, ich frage mich, gibt es eine Website mit Informationen über schnelle verschiedene Konstrukte in verschiedenen Sprachen, vor allem. Java / C # / Python / ... (auch C ++, aber es gibt so viele Compiler, die sich wahrscheinlich sehr unterscheiden).
z. Gibt es einen Unterschied zwischen
? %Vor%und
%Vor% Ein anderes Beispiel: Ist a = a * 4
möglicherweise auf den gleichen Code wie a <<= 2
?
Ich könnte das natürlich selbst testen, indem ich beide schreibe und dann 100000 Mal laufen lasse und die Laufzeit vergleiche, aber ich würde auch gerne neue Wege kennenlernen, Dinge zu schreiben, vielleicht sogar Dinge, die ich vorher nicht bedacht habe. Danke für deine Antworten!
Gibt es einen Unterschied zwischen
if (a()) b();
unda() && b();
?
Ja, Lesbarkeit. Der erste ist viel klarer über die Absicht.
Ist
kompiliert?a = a * 4
möglicherweise auf den gleichen Code wiea <<= 2
?
Höchstwahrscheinlich ja. Aber selbst wenn sie als unterschiedliche CPU-Anweisungen enden würden, wäre der Zeitunterschied sehr klein und abhängig von den Anweisungen davor und danach.
Micro-Optimizing für moderne CPUs ist
Abschließend schreiben Sie lesbaren Code zuerst. Wenn Sie ein Leistungsproblem haben, profilieren und messen Sie zuerst.
Sie sollten sich darum kümmern, die richtigen Algorithmen zu verwenden und nicht mehr als nötig eine Sammlung zu lesen. Aber auf der Befehls- / Anweisungsebene gibt es zu viele Schichten (Compiler, Jitter, Pipeline-CPU) zwischen Ihnen und dem, was tatsächlich ausgeführt wird.
Ich würde sagen, dass dies wahrscheinlich die Art von Mikrooptimierungen sind, die keinen Unterschied machen und die Mühe nicht wert sind.
Die Wahl des Algorithmus ist wichtig, aber die Bücher, die Sie lesen sollten, sollten eher dies oder dies .
Wenn Sie wirklich sehen möchten, ob die von Ihnen genannten Bit-Hacks einen Unterschied machen, empfehle ich Ihnen, zuerst eine Leistungsbasislinie für den Code zu erhalten, den Sie ändern möchten. Nehmen Sie Ihre Änderungen vor und messen Sie die Leistung auf die gleiche Weise neu. Wenn Sie ein Ergebnis erhalten, das besagt, dass es das wert ist, fahren Sie auf jeden Fall fort.
Sie sollten Ihren Code besser profilieren und herausfinden, wo der langsamste Teil Ihres Codes liegt und wo am meisten gearbeitet wird. Raten funktioniert bei der Optimierung selten.
Lassen Sie sich von solchen Mikrooptimierungen nicht stören. Sie werden Ihnen im Performance-Aspekt nichts geben.
Wenn Sie Leistungsprobleme haben, suchen Sie den Engpass und optimieren Sie ihn.
Tun Sie immer Ihr Bestes, um guten, sauberen und effizienten Code zu erstellen. Dies kann Mikrooptimierungen bedeuten (wie zB stringbuilder anstelle von Strings verwenden, keine regexps verwenden, wenn sie nicht notwendig sind, solche Sachen, höre nicht auf Leute, die sagen, dass diese sinnlos sind: wenn du schlechten Code schreibst und nicht t egal, der JITter hilft Ihnen nicht) oder Engpassoptimierungen (wählen Sie nicht * aus einer ganzen Tabelle, verwenden Sie Multithreading). Die verwaltete Umgebung erledigt den Rest. CPU-intensives Zeug wird niemals so leistungsfähig sein wie nicht gemanagter Code, aber es gibt auch viele Vorteile, weshalb die meisten Leute sie gerne verwenden. Wenn Sie wirklich schnelle Teile von Code wollen, tun Sie es in C, Assembly oder Hardware. Die meisten der heutigen Geschäftsanwendungen sind nicht CPU-intensiv, wie in GUI's, Webservices, Datenbanken, Festplattennutzung, sie alle beinhalten eine Menge Warte- und Leerlauf-CPU.
Was Ihre Frage betrifft: if (a ()) b (); und a () & amp; b (); sind völlig gleich, es gibt keine Optimierung hier. a * a und a & lt; & lt; 2 sind nicht gleich, letzteres ist a * 4.
Tags und Links algorithm java c# performance