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

 
Maxim Dmitrievsky:

Es handelt sich also um ein 2-dimensionales Array, eine Matrix. Schreiben Sie es.

Können Sie mir ein Beispiel zeigen, wie man mehrdimensionale Arrays schreibt und liest? In der Theorie ist das klar, aber die Umsetzung ist nicht klar.

 
Aleksey Vyazmikin:

Können Sie mir ein Beispiel zeigen, wie man mehrdimensionale Arrays schreibt und liest? In der Theorie ist das klar, aber die Umsetzung ist unklar.

Genau wie eindimensionale Arrays kann mit WriteArray()

 
Aleksey Vyazmikin:

Ich bin mit der Klasse vertraut, ich benutze sie seit 3 Jahren, seit MT4 - sie ist praktisch, aber verdammt langsam.

Natürlich ist es einfach, eine Zeichenkette zu lesen, aber sie in eine funktionierende Zellstruktur zu verwandeln, ist viel schwieriger.

Was meinen Sie damit, dass ich keine Klassen verwenden kann? Ich schon, und außerdem hat der Mitarbeiter von metaquote den Kurs geschrieben. Und dann stellte ich tatsächlich eine Person ein, bezahlte und erwartete ein fertiges Produkt, aber mir wurde gesagt, dass es OK ist, langsam zu sein... Ich habe ihnen geglaubt, aber jetzt habe ich auch noch den Gedächtnis-Overkill - ich bin empört.

Die Klasse ist für kleine Dateien konzipiert. Es spielt überhaupt keine Rolle, wer die Klasse erstellt hat. Jetzt brauchen wir einen anderen Ansatz, um eine Datei zu lesen, so dass diese Klasse diese Datei schlecht behandelt.

 
Roffild:

Die Klasse ist für kleine Dateien konzipiert. Es spielt überhaupt keine Rolle, wer die Klasse erstellt hat. Jetzt brauchen Sie einen anderen Ansatz zum Lesen einer Datei, so dass diese Klasse nicht gut mit dieser Datei umgehen kann.

Ich werde es fortführen. Das war's, danke.

 
Maxim Dmitrievsky:

genau wie eindimensionale, durch WriteArray()

Ich habe ein Beispiel gefunden, ich muss es ausprobieren, ich muss zwei Dateien schreiben - zum allgemeinen Verständnis und wahrscheinlich, um die Bearbeitung zu beschleunigen.

Ich danke Ihnen.

Hinzugefügt: Soweit ich weiß, kann man immer nur 1 Array auf einmal schreiben, was natürlich nicht sehr praktisch ist.
 
Roffild:

Die Klasse ist für kleine Dateien konzipiert. Es spielt überhaupt keine Rolle, wer die Klasse erstellt hat. Jetzt brauchen Sie einen anderen Ansatz zum Lesen einer Datei, so dass diese Klasse nicht gut mit dieser Datei umgehen kann.

Wenn ich mich richtig erinnere, habe ich sofort gesagt, dass wir mit großen Dateien arbeiten müssen, und zum Beispiel eine große Datei gegeben wurde - zehn Megabyte, wenn nicht hundert (wir brauchen, um die Korrespondenz zu sehen, und im aktuellen Format ist es nicht bequem zu tun).

 
Aleksey Vyazmikin:

Habe ein Beispiel gefunden, muss es ausprobieren, werde zwei Dateien schreiben müssen - zum allgemeinen Verständnis, und wahrscheinlich um die Bearbeitung zu beschleunigen.

Ich danke Ihnen.

Hinzugefügt: Soweit ich weiß, kann man immer nur 1 Array auf einmal schreiben, was natürlich nicht sehr praktisch ist.

Sehr praktisch :)

 
Maxim Dmitrievsky:

sehr praktisch :)

Das ist unpraktisch, weil Sie für verschiedene Datentypen eine eigene Datei erstellen müssen.

 
Aleksey Vyazmikin:

Das ist unpraktisch, da Sie für verschiedene Datentypen eine eigene Datei erstellen müssen.

Sie können sie im gleichen Verzeichnis ablegen, damit sie nicht verstreut sind. Sie werden keine Probleme haben. Das mache ich bei Experten immer so. Ich erstelle sofort ein Verzeichnis mit dem Namen Programmname/Kontonummer und ich habe alle Dateien darin abgelegt.

 

Ich empfehle, zunächst eine minimale Änderung vorzunehmen, damit die Neuzuweisung von Speicher weniger häufig erfolgt. Zwei Zeilen

m_total_rows++;
ArrayResize(m_cells,m_total_rows*m_total_columns,10000);

in bool CSVReader::AddData(string data_str,bool header) ersetzen durch

m_total_rows++;
if (m_total_rows*m_total_columns>ArraySize(m_cells)) ArrayResize(m_cells,2*m_total_rows*m_total_columns);

Die Anzahl der Speicherneuzuweisungen mit Kopieren sollte O(log(n,2)) statt O(n) werden. 20 anstelle von 600 Tausend. Vielleicht ist das jetzt genug für Sie.

Grund der Beschwerde: