Il mio approccio. Il nucleo è il motore. - pagina 84

 
Maxim Kuznetsov:

E sì, analizzare i testi in MQL è molto divertente :-) Beh, non è progettato per l'analisi del testo. Voglio dire, si può, ma è un peccato...

Array e ordini: ecco cos'è MQL

È di questo che sto parlando... :)

 
Nikolai Semko:

La versatilità è spesso sinonimo di lentezza, e ancora di più con la corda.
Vi faccio un esempio.

Una volta ho analizzato una stringa ricevuta da un crypto-exchange usando WebRequest. E l'ho analizzato usando lalibreria JSON di Sergeev, che ha portato da "high-speed C++ library". E ho notato che la velocità è molto insoddisfacente. Lì tutto era fatto attraverso stringhe "universali".

Ho capito che la ragione della bassa velocità era la stringa e volevo evitare di usare le funzioni di stringa e ho scritto una funzione che analizza direttamente dall'array uchar. Il risultato mi ha sorpreso non poco. La mia velocità di analisi era .... (rullo di tamburi) 800 volte più veloce. Se l'analisi di un'intera stringa attraverso JSON ha richiesto 0,3 secondi, la mia funzione l'ha analizzata in meno di mezzo millisecondo.

Ecco un esempio del mio parsing tramite array uchar.

Il succo del suo suggerimento è il seguente:

  1. Prendiamo una stringa (640 caratteri), la inviamo alla funzione StringToChar();
  2. Otteniamo l'array e lo memorizziamo nella risorsa.
  3. Ottenere il contenuto della risorsa sul secondo lato usando ResourceReadImage() nel secondo array.
  4. Invia il secondo array a CharArrayToString() e ottiene la stringa finale.
  5. Successivamente, dividete la stringa con un delimitatore e scrivete i valori dei parametri nel kernel.

Inizialmente volevo usare gli oggetti MT per trasferire le stringhe.

  1. Prendiamo una stringa (640 caratteri) e la dividiamo in parti di 64 caratteri ciascuna.
  2. Facciamo un ciclo sugli oggetti di comunicazione e scriviamo le parti della stringa nella loro descrizione.
  3. Sul secondo lato, fare un ciclo sugli oggetti di comunicazione, ottenere parti della stringa e ogni parte è divisa da un delimitatore, estraendo il numero e il valore del parametro.
  4. Scriviamo i valori dei parametri nel kernel.

La seconda variante mi sembrava inizialmente più veloce.

Quando hai così tanti compiti come me, devi affidarti al tuo intuito quando scegli una soluzione. Non avrete abbastanza vita per controllare tutto accuratamente. Hai bisogno di una squadra o di un grande senso di intuizione per scegliere la direzione giusta. E, naturalmente, bisogna sacrificare la professionalità e sopportare le lacune di conoscenza. Altrimenti, rimarrete a fare scarabocchi (anche se in modo professionale) e non finirete mai un mega-progetto. Questa è la realtà.

 
Реter Konow:

Il succo del suo suggerimento è il seguente:

  1. Prendiamo una stringa (640 caratteri), la inviamo a StringToChar();
  2. Otteniamo un array e lo memorizziamo in una risorsa.
  3. Ottenere il contenuto della risorsa sul secondo lato usando ResourceReadImage() nel secondo array.
  4. Invia il secondo array a CharArrayToString() e ottiene la stringa finale.
  5. Poi, dividete la stringa per separatore e scrivete i valori dei parametri nel kernel.

Non è affatto così.
Sono occupato al momento - non ho tempo per spiegare.

Se smontate il mio codice in dettaglio, in modo da non lasciare punti vuoti, farete molte scoperte per voi stessi.
ZS. Solo che senza un debugger sarà molto più difficile capirlo. Non so se hai iniziato ad usarlo o se ancora non usi questo importante strumento.

 
Nikolai Semko:

...

Se esaminate il mio codice in dettaglio, e non lasciate punti vuoti, farete molte nuove scoperte.
ZS. Solo che senza usare il debugger sarà molto più difficile da capire. Non so se hai iniziato ad usarlo o se ancora non usi questo importante strumento.

Domani darò un'occhiata più da vicino al tuo codice. (Non dimenticare i fusi orari).

Forse, infatti, scoprirò qualcosa di nuovo. ))

 

Qualsiasi struttura è una stringa. Un array di strutture è un array di stringhe con una descrizione del loro formato. Classe - struttura e metodi, implementazione della classe - array di implementazioni (scusate il francesismo).

Non c'è bisogno di convertire nulla fino all'ultimo momento. Dappertutto ci sono solo corde. Semplicemente, sono normalizzati: alcuni prendono 2, o 4 byte, e alcuni prendono 1, quindi bisogna allineare.

Ho usato questo approccio per la prima volta intorno al 1993, Clarion DBMS. Ha funzionato molto rapidamente.

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

Qualsiasi struttura è una stringa. Un array di strutture è un array di stringhe con una descrizione del loro formato. Classe - struttura e metodi, implementazione della classe - array di implementazioni (scusate il francesismo).

Non c'è bisogno di convertire nulla fino all'ultimo momento. Dappertutto ci sono solo corde. Semplicemente, sono normalizzati: alcuni prendono 2, o 4 byte, e alcuni prendono 1, quindi bisogna allineare.

Ho usato questo approccio per la prima volta intorno al 1993, Clarion DBMS. Tutto ha funzionato molto rapidamente.

Circa lo stesso tempo con lo stesso :-) Una scuola... comunque il DBMS non era male ed era in anticipo sui tempi in molti modi.

PS/ c'è un solletico molto amato a volte, a posteriori a livello di concetto "tutto è una stringa/testo". La velocità è davvero al livello di python.

 
Реter Konow:

Domani darò un'occhiata più da vicino al tuo codice. (Non dimenticare i fusi orari).

Forse scoprirò davvero qualcosa di nuovo. ))

Forse sarà utile

L'esempio di indicatore che utilizza la variabile risorsa su doppio esempio, che non reinizializza il suo valore quando si cambia TF. Questa è un'alternativa più conveniente alle variabili globali del terminale. Allo stesso modo, diverse strutture di dati e array di queste strutture possono essere utilizzati come globali.

File:
 
Nikolai Semko:

potrebbe ancora tornare utile.

)

 
Реter Konow:
Per amore dell'interesse, proverò la variante con l'unione. E conCharArrayToString e StringToCharArray. Anche se la mia intuizione mi dice che difficilmente sarà più veloce della comunicazione tramite la descrizione di oggetti МТТ. Ma potrei sbagliarmi. Vediamo...

Peter, hai fatto un jolly fin dall'inizio, e ora stai discutendo sulle prestazioni di messaggistica all'interno del tuo jolly. Avete capito: una stringa è solo un comodo ***, niente di più. Qualsiasi dato è in realtà solo un insieme di byte nella memoria. Quindi vi si consiglia di gestire direttamente i byte, ma siete testardi come sempre a non capire che la stessa stringa è lo stesso array di byte. Quindi non si perde nulla nella conversione di una stringa in un array uchar, ma quando si analizza una stringa, le prestazioni rallentano davvero. Ecco perché manca tutta la tua intuizione.

 
Vasiliy Sokolov:

1. Peter, all'inizio hai fatto un gioco, e ora stai discutendo sulle prestazioni della messaggistica all'interno del tuo gioco.

2.Hai capito: una stringa è solo un comodo ***, niente di più. Qualsiasi dato è in realtà solo un insieme di byte nella memoria. Quindi, vi consigliano di lavorare direttamente con i byte, ma voi siete testardi come sempre a non capire che la stessa stringa è lo stesso array di byte. Quindi non si perde nulla nella conversione da stringa a array uchar, ma quando si analizza una stringa, le prestazioni rallentano davvero.

3. Quindi tutte le tue intuizioni sono solo una mancanza.

1. "Wildness" - in questo caso, è la tua comprensione, non quello che ho fatto. Ci sono volute 75 pagine per farvi capire di cosa si tratta e di cosa è il motore. Capire: I difetti e gli errori non caratterizzano un'entità. Nessuna forma di essenza caratterizza l'essenza stessa. Proprio come i tuoi vestiti non definiscono che tipo di persona sei. Solo il pensiero sbagliato giudica il tutto dal particolare.

2. Per me è chiaro così com'è. Oggi controllerò se ci sarà un reale guadagno di velocità usando la funzione StringToChar.

3. Ogni giorno controllo la mia intuizione. Ne dubito ogni giorno. E giustamente. Se fallisce, dovreste farvi guidare dalla Ragione. Ma la Ragione è troppo limitata, arrogante e stupida per essere sempre affidabile. Pertanto, l'intuizione è l'unica alternativa. Se sai cosa intendo...

Motivazione: