Ist es möglich, viele "Oder"-Zeichen (||) in Bedingungen zu vermeiden, die dieselbe Aktion verursachen? - Seite 6

 
Meat:

borilunad, fügen alle Funktionsaufrufe unnötige Bremsen hinzu. Wenn es also auf maximale Geschwindigkeit ankommt, sollten Sie alle Request(), die einsilbige Operationen durchführen, abschaffen. Dasselbe gilt für Schleifen. Die Überprüfung von Bedingungen in einer Schleife ist immer viel langsamer als eine Reihe von verschachtelten if()

Selbst sich gegenseitig ausschließende Bedingungen sind also besser mit der Aktion if(A || B || C || D);

Aber ich kann Funktionsaufrufe nicht vermeiden, da ich an dieser Stelle eine Menge Daten überprüfen muss, die in diesen Bedingungen enthalten sind.

Ich werde meine Experimente fortsetzen, vielleicht finde ich ja etwas heraus. Aber ich habe keine Kontrolle über die Verbreitung! :)

 
Im Allgemeinen wäre dies die schnellste Option:
bool result;
if (A) result=true;
else
if (B) result=true;
else
if (C) result=true;
else
if (D) result=true;
else result=false;

if (result) Action();


Die Zeileresult=false sollte jedoch besser mit der ersten Zeile kombiniert werden, da sie die Geschwindigkeit nicht beeinträchtigt.Wenn A, B, C und D einfache Bedingungen enthalten (mit minimaler Arithmetik, ohne Aufrufe aller mathematischen Funktionen und sonstigem Kram), dann wird man im Allgemeinen keinen großen Leistungsgewinn durch eine solche Optimierung erzielen (es sei denn, diese Konstruktion wird zig Millionen Mal ausgeführt). Aber die Überladung von Code kann erheblich sein.

Ich habe in einem der Threads darüber geschrieben, dass alles rational gehandhabt werden muss. Aus irgendeinem Grund scheint es mir, dass Ihr Code voll von wichtigeren Stellen ist, deren Optimierung wirklich einen enormen Performancegewinn bringen würde. Sie sollten mit dem grundlegenden Algorithmus beginnen. Die meisten Neulinge haben eine dumme Überprüfung aller Bedingungen bezüglich TS oder offener Orders bei jedem Tick. In den meisten Fällen reicht es jedoch aus, nur die Randbedingungen zu prüfen, z. B. wenn der Hoch- oder Tiefpunkt einen bestimmten Wert erreicht oder wenn ein neuer Balken erscheint. Erst danach können Sie weitere Prüfungen durchführen.

Nun, außer bei ressourcenintensiven Berechnungen sollten Sie darüber nachdenken, diese Berechnungen in eine DLL zu verlagern. Andernfalls, zu sitzen und warten für 13 Minuten in fucking MQL4 (während Sie das gleiche Ergebnis für 2-3 Minuten erhalten können) scheint unglücklich zu sein :)

 
Meat:
Im Allgemeinen wäre dies die schnellste Option:

Die Zeileresult=false sollte jedoch besser mit der ersten Zeile kombiniert werden, da sie die Geschwindigkeit nicht beeinträchtigt.Wenn A, B, C und D einfache Bedingungen enthalten (mit minimaler Arithmetik, ohne Aufrufe aller mathematischen Funktionen und sonstigem Kram), dann wird man im Allgemeinen keinen großen Leistungsgewinn durch eine solche Optimierung erzielen (es sei denn, diese Konstruktion wird zig Millionen Mal ausgeführt). Aber die Überladung von Code kann erheblich sein.

Ich habe in einem der Threads darüber geschrieben, dass alles rational gehandhabt werden muss. Aus irgendeinem Grund scheint es mir, dass Ihr Code voll von wichtigeren Stellen ist, deren Optimierung wirklich einen enormen Performancegewinn bringen würde. Sie sollten mit dem grundlegenden Algorithmus beginnen. Die meisten Neulinge haben eine dumme Überprüfung aller Bedingungen bezüglich TS oder offener Orders bei jedem Tick. In den meisten Fällen reicht es jedoch aus, nur die Randbedingungen zu prüfen, z. B. wenn der Hoch- oder Tiefpunkt einen bestimmten Wert erreicht oder wenn ein neuer Balken erscheint. Erst danach können Sie weitere Prüfungen durchführen.

Nun, außer bei ressourcenintensiven Berechnungen sollten Sie darüber nachdenken, diese Berechnungen in eine DLL zu verlagern. Andernfalls, zu sitzen und warten für 13 Minuten in fucking MQL4 (während Sie das gleiche Ergebnis für 2-3 Minuten erhalten können) scheint unglücklich zu sein :)

Die schnellste Option wurde von Paco vorgeschlagen
 
tara:
Die schnellste Option wurde von Paco vorgeschlagen

Glauben Sie ernsthaft, dass es schneller ist, jedes Mal mehrere Werte zu summieren (d. h. unnötige Rechenoperationen durchzuführen)? Bei meiner Variante endet die Prüfung bei der ersten Übereinstimmung, während sie bei der von Ihnen genannten Variante erst nach der Summierung aller Werte und der anschließenden Prüfung der Summe erfolgt.

Außerdem müssen bei dieser Variante ALLE Bedingungen im Voraus berechnet werden. Über welche Art von Geschwindigkeit reden wir hier? Das ist die langsamste Option.

 
und Schalter - Fall ist keine gute Idee?
 

Wenn Sie schneller sein wollen, können Sie bitweise Operationen verwenden.

D.h. alle Variablen müssen vom Typ int sein (false=0). Dann bitweise A|B|C...>0

 
Avals:

Wenn Sie schneller sein wollen, können Sie bitweise Operationen verwenden.

D.h. alle Variablen müssen vom Typ int sein (false=0). Dann bitweise A|B|C...>0

Und wozu das Ganze? Genau wie bei der Summierung müssen alle Bedingungen vorberechnet werden. Und warum alle berechnen, wenn nur eine der Bedingungen ausreicht?
 

Und niemand wird die vorgeschlagenen Varianten auf ihre Ausführungsgeschwindigkeit überprüfen?

Sie können das Skript von hier verwenden

 
Meat:
Im Allgemeinen wäre dies die schnellste Option:

Die Zeileresult=false sollte jedoch besser mit der ersten Zeile kombiniert werden, da sie die Geschwindigkeit nicht beeinträchtigt.Wenn A, B, C und D einfache Bedingungen enthalten (mit minimaler Arithmetik, ohne Aufrufe aller mathematischen Funktionen und sonstigem Kram), dann wird man im Allgemeinen keinen großen Leistungsgewinn durch eine solche Optimierung erzielen (es sei denn, diese Konstruktion wird zig Millionen Mal ausgeführt). Aber die Überladung von Code kann erheblich sein.

Ich habe in einem der Threads darüber geschrieben, dass alles rational gehandhabt werden muss. Aus irgendeinem Grund scheint es mir, dass Ihr Code voll von wichtigeren Stellen ist, deren Optimierung wirklich einen enormen Performancegewinn bringen würde. Sie sollten mit dem grundlegenden Algorithmus beginnen. Die meisten Neulinge haben eine dumme Überprüfung aller Bedingungen bezüglich TS oder offener Orders bei jedem Tick. In den meisten Fällen reicht es jedoch aus, nur die Randbedingungen zu prüfen, z. B. wenn der Hoch- oder Tiefpunkt einen bestimmten Wert erreicht oder wenn ein neuer Balken erscheint. Erst danach können Sie weitere Prüfungen durchführen.

Nun, außer bei ressourcenintensiven Berechnungen sollten Sie darüber nachdenken, diese Berechnungen in eine DLL zu verlagern. Andernfalls wäre es bedauerlich, 13 Minuten im verdammten MQL4 zu sitzen und zu warten (obwohl wir das gleiche Ergebnis in 2-3 Minuten erhalten könnten).

if (A) Action();
 else
  if (B) Action();
   else
    if (C) Action();
     else
      if (D) Action();

Auf diese Weise geht es noch schneller.

Ich erinnere mich an eine Geschichte:

"In einer Vorstandssitzung eines Unternehmens gab es zwei Fragen:

1. Die Entscheidung, ein Synchrophasotron zu bauen.

2. Die Entscheidung, einen Fahrradparkplatz für die Mitarbeiter zu bauen.

Beim ersten Thema dauerte die Diskussion 1 Minute,

Am 2. Tag dauerte die Debatte mehr als 2 Stunden.

 
Wem "fucking MQL4" nicht gefällt, der kann sich auch gleich aus dem Staub machen. Denn es ist unklar, was er hier tut, trotz aller Vorzüge und der Altertümlichkeit des Berichts.