Toute question d'un PROFI à un SUPER PROFI - 1. - page 29

 
sergeev:

lors de la fermeture d'un handle, la mémoire (qui a été allouée au-delà de celle spécifiée dans CreateFileMapping) n'est-elle pas récupérée ?
C'est libéré. Mais c'est à la fin. Nous devons économiser la mémoire au moment de l'exécution.
 
à la fin de quoi ? la fin du win dow ou la fermeture d'une poignée ou la fermeture d'une application ?
 
sergeev:
à la fin de quoi ? la fin du win dow ou la fermeture d'une poignée ou la fermeture d'une application ?
Vous pouvez choisir l'un ou l'autre. Quand même, c'est la fin.
 
ah, bien, si c'est la fermeture de l'en-tête, alors je ne pense pas qu'il y ait de fuite de mémoire, c'est la façon normale pour Windows de libérer de la mémoire quand un en-tête est supprimé
 

Il n'est pas correct de libérer la mémoire en cours d'exécution en fermant le descripteur.

La mémoire doit être libérée sans l'espoir de Windos.

 
MSDN pour Mapping ne dit rien sur la libération manuelle de la mémoire avant de fermer le gestionnaire.
 
sergeev:
MSDN pour Mapping ne dit rien sur la libération manuelle de la mémoire avant de fermer le gestionnaire.
Eh bien, je ne veux pas dire après la fermeture de la poignée. En travaillant avec la mémoire, nous devons la redimensionner dynamiquement. Mais vous n'avez pas à le faire tout le temps. Une réaffectation constante prend du temps.
 

Vadim, qu'est-ce qu'on analyse exactement ?

J'ai trouvé deux façons d 'étendre la mémoire. Pensez-vous qu'il y aura des problèmes de fuites de mémoire dans les deux cas ?

 

Si tous les descripteurs sont fermés, il n'y a pas de fuites. Il y a fuite lorsqu'un programme est déchargé mais laisse des ressources occupées.

Mais il peut y avoir des problèmes de consommation excessive de mémoire. J'ai moi-même eu de tels problèmes il n'y a pas si longtemps. J'ai connecté la mauvaise classe pour travailler avec les séries chronologiques. J'ai ajouté une classe qui indexe les ticks par secondes. J'ai commencé à utiliser cette classe pour travailler avec des barres mensuelles. Il a mangé toute la mémoire en 30 secondes. C'est l'une des variantes possibles. Nous devrions surveiller ce genre de choses et les mettre en garde.

Le deuxième cas est celui où le programme a besoin de beaucoup de mémoire, par exemple 1000 Mb, mais pas pour une longue période. Si vous ne le libérez pas, les autres programmes auront 1000 Mo de moins jusqu'à ce que votre programme soit déchargé.

En bref, vous devez suivre la consommation des ressources.

 
OK. Je vais prendre ça en considération.