Bibliothèque: Mappage de fichiers sans DLL - page 2

 

Alex, comment libère-t-on de la mémoire lorsqu'un fichier n'est plus nécessaire ?

Je veux dire, pour que je ne sois pas obligé de pomper des mégas et des gigas de RAM, parce qu'il peut y avoir beaucoup de fichiers.

 
CloseHandle est-il utile ?
 
sergeev:

CloseHandle est-il utile ?

CloseHandle est appelé à l'intérieur de Close(), mais il ne libère pas la mémoire, et en rouvrant (sans créer) vous pouvez obtenir les informations sauvegardées.

Cela signifie que la mémoire vive est occupée.

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

Je pense qu'il serait préférable de modifier la taille du fichier à 0 pour garantir la libération de la mémoire.

Il y a aussi Grows pour augmenter la taille, et Delete pour tuer le fichier en réduisant à zéro la mémoire allouée.

 

Je vous remercie. C'est tout à fait nécessaire.

Et, peut-être, une question hors sujet : File Mapping peut-il être adapté pour utiliser une génétique externe (par exemple, un script exécuté dans le terminal) au lieu de la génétique standard lors de l'optimisation ?

 
joo:

Je vous remercie. C'est tout à fait nécessaire.

Et, peut-être, une question hors sujet : File Mapping peut-il être adapté pour utiliser une génétique externe (par exemple, un script exécuté dans le terminal) au lieu de la génétique standard lors de l'optimisation ?


A moins d'être semi-automatique, quelqu'un doit démarrer le testeur et l'arrêter de toute façon (si vous avez l'intention d'utiliser claud).

Et sans claude, il n'y a aucun intérêt à utiliser un testeur.

 
Urain:

CloseHandle est appelé à l'intérieur de Close(), mais il ne libère pas la mémoire, et en rouvrant (sans créer) vous pouvez récupérer les informations sauvegardées.

Je pense qu'elles restent là jusqu'à ce que quelqu'un les réécrive. Cela s'est déjà produit. L'application qui écrit ferme la poignée et l'application qui lit ne le fait pas. Mais elle peut lire les données. Mais après quelques opérations dans Windows, les données du fichier changent.

Ce qui signifie que la mémoire vive est pleine.

Je n'en suis pas sûr.
 

joo:

File Mapping peut probablement être adapté pour utiliser une génétique externe (par exemple, un script exécuté dans le terminal) au lieu de la génétique standard lors de l'optimisation ?

Si vous utilisez des fichiers pour stocker des données intermédiaires, vous pouvez bien sûr le faire. L'essentiel est de réinitialiser les données sur le disque à certains points de référence, car si quelque chose se produit, les informations seront irrémédiablement perdues.
 
sergeev:

Je pense qu'il reste là jusqu'à ce que quelqu'un le réécrive. Cela m'est déjà arrivé. L'application qui écrit ferme la poignée et l'application qui lit ne le fait pas. Mais elle peut lire les données. Mais après quelques opérations dans Windows, les données du fichier changent.

Je n'en suis pas sûr.
Peut-être devons-nous le vérifier d'une manière garantie. Mais je ne sais pas comment.
 
Urain:

À moins qu'il ne s'agisse d'un semi-automatique, quelqu'un doit de toute façon démarrer le testeur et l'arrêter (si vous avez l'intention d'utiliser un claud).

ZY et sans claud, il n'y a aucun intérêt à utiliser un testeur sans claud.

Oui, il y a un problème avec claud....

Je voulais dire que l'utilisateur exécute le script sur le graphique et lance ensuite l'optimisation dans le testeur (le script commence à "glisser" les variables nécessaires via le mappage de fichiers vers le conseiller expert optimisé). Comment, quand et dans quelles conditions arrêter l'optimisation est une autre question (par exemple, l'Expert Advisor reçoit le drapeau "prêt" et le bourrage de l'Expert Advisor cesse de fonctionner, de sorte que le testeur effectuera les exécutions restantes en mode inactif - il exécutera donc rapidement les exécutions restantes).

Voici comment cela se passe.