MT5 RAM-Speicherüberfluss, Probleme beim Lesen/Schreiben großer Dateien - Seite 3

 
Vladislav Andruschenko:
oop

Ich kann sehen, dass oop... warum schreiben Arrays in Zeichenfolgen, wenn Sie sie in binäre auf einmal schreiben können

 
Maxim Dmitrievsky:

Ich kann sehen, dass oop... warum schreiben Arrays in Zeichenfolgen, wenn Sie sie in binäre auf einmal schreiben können?

Es steht geschrieben, der Mann bearbeitet sie in Excel.

 
Sergey Savinkin:

Dort steht, dass der Mann sie in Excel verarbeitet.

das steht da nicht

 
Maxim Dmitrievsky:

Das steht dort nicht.

Der allererste Beitrag. Wenn Sie genau lesen, hat diese Datei möglicherweise nichts mit MT5 zu tun. Oder auf eine bestimmte Weise behandelt werden.

 
Sergey Savinkin:

Der allererste Beitrag. Wenn Sie genau lesen, hat diese Datei möglicherweise nichts mit MT5 zu tun. Oder auf eine bestimmte Weise behandelt werden.

Er soll also selbst entscheiden, woher er die Informationen bekommt.

Kann auch als Array gelesen werden, denke ich.
 
Aleksey Vyazmikin:

Vielen Dank für die Analyse des Codes.

Es fällt mir schwer, OOP zu verstehen, daher ist es für mich eine Qual, Änderungen daran vorzunehmen. So wie ich es verstanden habe, geht es um die Klasse, die für das Lesen zuständig ist, dass dort die ganze Datei in String-Arrays aufgeteilt wird, und erst dann, wenn ich will, konvertiere ich diese String-Werte in einen anderen Typ und setze sie in Arrays vom Typ int in mein Skript. Wenn ich es richtig verstehe, dann sollte ich, um den Prozess zu beschleunigen, die gesamte Datei lesen und herausfinden, wie viele Zeilen und Spalten es gibt und wie viele Symbole in jeder Zelle sind, und dann sofort die Feldgröße auswählen? Wie kann man das dann tun?

Ich würde gerne verstehen, woher die 400 Megabyte auf einmal kommen? Habe ich es richtig verstanden, dass Speicher zugewiesen wird, aber es wird nicht gelöscht/verschenkt, die zuvor zugewiesen wurde?

400 MB sind 36 Millionen Zellen mit leeren Zeilen zu je 12 Byte, 12*36=432.

Wenn Sie wissen wollen, wie Sie es besser machen können, erzählen Sie uns von dem Problem, das Sie lösen wollen. Wie oft und wie stark sich die Datei ändert, ob alle jedes Mal aus ihr lesen müssen, ob die Anzahl der nicht leeren Zellen von Zeile zu Zeile konstant ist, ob alle Zellen nur ganze Zahlen enthalten. Vielleicht sollte man einmal in der Woche 9 Minuten aufwenden, und das ist gar nicht viel - dann braucht man nichts zu ändern.

Im Allgemeinen besteht die Hauptrichtung in der Deklaration einer Struktur mit 57 Feldern, die Integer-Werten entsprechen, und deren Verwendung sowohl zum Schreiben als auch zum Lesen (die Datei ist binär). Dann werden 78 MB in weniger als einer Sekunde von der Festplatte direkt in den Speicher eingelesen, ohne Begrenzungszeichen oder Zeichenfolgendarstellungen. Speichern Sie die Ausgabe zu Debugging-Zwecken auch im .csv-Format. Die Dateigröße bestimmt unmittelbar die Anzahl der Elemente im Array dieser Strukturen.

 
Vladimir:

400 MB sind 36 Millionen Zellen mit leeren Zeilen zu je 12 Byte, 12*36=432.

Die Rechnung ist klar.

Wladimir:

Wenn Sie wissen wollen, wie Sie es besser machen können, erzählen Sie uns von dem Problem, das Sie lösen wollen. Wie oft und wie stark sich die Datei ändert, ob jedes Mal alles aus ihr gelesen werden muss, ob die Anzahl der nicht leeren Zellen von Zeile zu Zeile konstant ist, ob alle Zellen nur ganze Zahlen enthalten. Vielleicht sollte man einmal in der Woche 9 Minuten aufwenden, und das ist gar nicht viel - dann braucht man nichts zu ändern.

Die Aufgabe ist universell, es geht um das Einlesen von Dateien im CSV-Format, denn dieses Format ist universell für verschiedene Programme, die mich derzeit mit Daten versorgen. Wenn Sie sich speziell auf dieses Skript beziehen, dann ja, Sie müssen nur alles lesen und berechnen, denn Excel stürzt wegen der Formeln ab. Die Zellen können auch nicht-ganzzahlige Werte enthalten (nicht speziell in diesem Beispiel). 9 Minuten sind nicht viel, wenn es einmal in der Woche ist... Doch unter anderem muss ich mit einer solchen Menge von Daten durch Optimierer arbeiten, Übergabe der Datei auf der Seite und dort die Durchführung seiner Verarbeitung mit Hilfe von Agenten, dann erhalten das Ergebnis im CSV-Format (hier kann ich natürlich in einem anderen Format) und führen eine weitere Verarbeitung. Deshalb habe ich mich entschlossen, dieses Problem öffentlich zu diskutieren, denn ich möchte mit MT5 große Datenmengen verarbeiten.

Wladimir:

Und im Allgemeinen, von "wo zu gehen, um schneller zu sein" Sicht - Mainstream: deklarieren Struktur, 57 Felder, von denen Integer-Werte entsprechen, und verwenden Sie es für beide Schreiben und Lesen (Datei ist binär). Dann werden 78 MB in weniger als einer Sekunde von der Festplatte direkt in den Speicher eingelesen, ohne Begrenzungszeichen oder Zeichenfolgendarstellungen. Speichern Sie die Ausgabe zu Debugging-Zwecken auch im .csv-Format. Die Dateigröße bestimmt unmittelbar die Anzahl der Elemente in dem Array dieser Strukturen.

Ich kann mir gar nicht vorstellen, wie das gehen soll. Oder muss die Ausgangsdatei unter besonderen Bedingungen erstellt werden? Vielleicht können Sie dann einen Konverter vom CSV- zum Binärformat erstellen?

Können Sie sich auch die zweite Klasse ansehen, wie man ihr beibringt, eine unbegrenzte Anzahl von Spalten zu schreiben?

 
Maxim Dmitrievsky:

WriteArray / Read sind schnell, max Größe bis zu 300 mb, alles ist sehr schnell, nicht verbrauchen RAM

Warum gibt es so viel Code für das Lesen/Schreiben, es ist alles in 4 Zeilen erledigt.

Können Sie uns zeigen, wie man das macht?

 
Maxim Dmitrievsky:

also soll er selbst entscheiden, woher er sie bekommt

kann auch als Array gelesen werden, denke ich

CSV ist ein universelles Dateiformat, das von verschiedenen Programmen unterstützt wird, unter anderem von der Software, die mit dem MO.

Außerdem ist es eine bequeme Datei, um Daten zwischen verschiedenen Programmen (Skripte/Advisoren) MT5 zu übertragen, und sie nimmt nicht viel Platz ein.

 
Aleksey Vyazmikin:

Können Sie uns zeigen, wie man das macht?

Versuchen Sie, Ihre Datei wie folgt zu lesen

https://www.mql5.com/ru/docs/files/filereadarray

Ich habe jetzt keine Zeit, das Terminal zu öffnen, vielleicht morgen)

Документация по MQL5: Файловые операции / FileReadArray
Документация по MQL5: Файловые операции / FileReadArray
  • www.mql5.com
//| Структура для хранения данных о ценах                            | //| Script program start function                                    |