Ermitteln der Anzahl der Dezimalstellen beliebiger Zahlen (nicht nur Anführungszeichen) unter Umgehung von Digits() in MQL4 und MQL5 - Seite 20

 
Алексей Тарабанов:

Das Ergebnis von was?

Geschwindigkeiten
 
fxsaber:

Die Vielfältigkeit ist die Voraussetzung für das Problem.

Einfach, ein Rätsel?

 
Алексей Тарабанов:

Einfach ein Rätsel?

Praktische Anwendungen

Forum zum Thema Handel, automatische Handelssysteme und Strategietests

Neue Version von MetaTrader 5 build 1930: Schwebende Diagrammfenster und .Net-Bibliotheken in MQL5

fxsaber, 2018.12.09 00:18

Dieses Beispiel läuft jetzt 15x schneller

1000000
Time[TestResource()] = 286646


Grob gesagt, läuft der gesamte Schreib-/Lese-Tick-Zyklus durch die Ressource mit 4 Millionen Ticks pro Sekunde.


Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Diskussion über den Artikel "Multithreaded asynchronous WebRequest in MQL5 with your own hands".

fxsaber, 2018.12.09 00:52

Probieren Sie die aktualisierte Resource_Data.mqh aus, die Verzögerungen bei der Übertragung der Webseite sollten verschwinden.

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}  

const RESOURCEDATA<uchar> Resource("::" + __FILE__); // Ресурс для передачи данных (байты)
uchar BytesIn[];
const int Init = ArrayResize(BytesIn, 1000000);

void TestResource()
{
  uchar BytesOut[];

  Resource = BytesIn;
  Print(Resource.Get(BytesOut));
}

void OnStart()
{
  BENCH(TestResource());
}


Alte Fassung

1000000
Time[TestResource()] = 103746


Neue Version

1000000
Time[TestResource()] = 5222
 
Ilya Malev:

Gibt es einen Vergleich der Sortiergeschwindigkeit mit regulären eingebauten ArraySort auf zufällige Stichproben? Mindestens eine Methode, die zufällige Daten im Durchschnitt schneller sortiert...

Oder nicht schneller, aber zumindest gleich schnell. Oder nicht so schnell, aber zumindest nicht länger als doppelt so lange. Ohne Dll und andere Dinge wie Multithreading

Es gibt einen Quellcode, den Sie selbst messen können.

 
Faulpelze.
 
Nikolai Semko:
Ich komme nicht daran vorbei.
Ich werde mich auf jeden Fall beteiligen, wenn ich an den Computer komme.
Nach einem kurzen Blick habe ich bereits Ideen, wie ich die Ergebnisse um 10-20 % verbessern kann.

Ich fürchte, ich bin bereits bei maximaler Leistung.

 
fxsaber:

Ich fürchte, wir sind bereits auf maximale Leistung festgelegt.

Vielleicht gibt es etwas, das ich nicht bemerkt habe. Aber auch wenn Sie nur eine Art von Gewerkschaft verwenden, gibt es noch Möglichkeiten.
 
Nikolai Semko:
Vielleicht gibt es etwas, das ich nicht bemerkt habe. Aber auch wenn Sie nur eine Art von Gewerkschaft verwenden, gibt es noch Möglichkeiten.

Ich bin froh, dass ich mich geirrt habe.

 
Алексей Тарабанов:
Faulpelze.
Du stinkst nach Schnaps. Hören Sie auf zu trinken, Genosse Oberstleutnant.
 
fxsaber:

Ich bin froh, dass ich falsch liege.

Es ist jetzt auf dem Weg. Versuchen Sie es doch selbst. Die Idee ist, Unions mit Arrays von Strukturen unterschiedlicher Größe zu verwenden, zum Beispiel 10, 100, 1000, 10000...
Dadurch wird die Schleife um Größenordnungen verkürzt und die Anzahl der ArrayCopy-Aufrufe um Größenordnungen reduziert.
Dies sollte der Memcopy-Variante sehr nahe kommen