Librerie: Mappatura dei file senza DLL - pagina 2

 

Alex, come si libera la memoria quando un file non è più necessario?

Voglio dire, in modo da non dover spalare mega e giga di RAM, perché ci possono essere molti file.

 
CloseHandle è utile?
 
sergeev:

CloseHandle è utile?

CloseHandle viene chiamato all'interno di Close(), ma non rilascia la memoria e riaprendo (senza creare) è possibile ottenere le informazioni salvate.

Ciò significa che la RAM è occupata.

void CMemMapFile::Close()
  {
   if(m_hmem!=NULL) CloseHandle(m_hmem); m_path=""; m_hmem=NULL; m_size=0; m_pos=0; m_mode=-1; // chiudere la maniglia
  }
 

Penso che sarebbe meglio cambiare la dimensione del file a 0 per garantire il rilascio di memoria.

Esiste anche Crescita per aumentare la dimensione, e aggiungere Elimina per eliminare il file azzerando la memoria allocata.

 

Grazie. Una cosa molto necessaria.

E, forse, una domanda fuori tema: File Mapping può essere adattato per utilizzare una genetica esterna (ad esempio, uno script in esecuzione nel terminale) invece di quella standard quando si ottimizza?

 
joo:

Grazie. Una cosa molto necessaria.

E, forse, una domanda fuori tema: File Mapping può essere adattato per utilizzare una genetica esterna (ad esempio, uno script in esecuzione nel terminale) invece di quella standard quando si ottimizza?


A meno che non sia semi-automatico, qualcuno deve comunque avviare il tester e fermarlo (questo se si intende usare claud).

E senza claude non ha senso usare un tester.

 
Urain:

CloseHandle viene chiamato all'interno di Close(), ma non rilascia memoria e riaprendo (senza creare) è possibile recuperare le informazioni salvate.

Credo che rimanga lì finché qualcuno non lo riscrive. È successo anche a me. L'applicazione che scrive chiude l'handle e l'applicazione che legge non lo fa. Ma può leggere i dati. Ma dopo alcune operazioni in Windows, i dati nel file cambiano.

Ciò significa che la RAM è piena.

Non ne sono sicuro.
 

joo:

File Mapping può probabilmente essere adattato per utilizzare una genetica esterna (ad esempio, uno script in esecuzione nel terminale) invece di quella standard durante l'ottimizzazione?

Se si usano i file per memorizzare i dati intermedi, allora è possibile. La cosa principale è ripristinare i dati su disco in alcuni punti di riferimento, perché se succede qualcosa, le informazioni andranno irrimediabilmente perse.
 
sergeev:

Penso che rimanga lì finché qualcuno non lo riscrive. È successo anche a me. L'applicazione che scrive chiude l'handle e l'applicazione che legge non lo fa. Ma può leggere i dati. Ma dopo alcune operazioni in Windows, i dati nel file cambiano.

Non ne sono sicuro.
Forse dobbiamo controllarlo in modo garantito. Ma non so come.
 
Urain:

A meno che non si tratti di un semiautomatico, qualcuno deve comunque avviare il tester e fermarlo (questo se si intende usare un claud).

ZY e senza claud non ha senso usare un tester senza claud.

Sì, c'è un problema con claud....

Beh, intendevo dire che l'utente esegue lo script sul grafico e poi avvia l'ottimizzazione nel tester (lo script inizia a "infilare" le variabili necessarie attraverso il File Mapping all'Expert Advisor ottimizzato). Come, quando e in quali condizioni interrompere l'ottimizzazione è un'altra questione (ad esempio, l'Expert Advisor riceve il flag "ready" e il stuffing dell'Expert Advisor smette di funzionare, quindi il tester eseguirà le corse rimanenti in modalità idle - quindi eseguirà rapidamente le corse rimanenti).

Funziona così.