Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[SOLUCE?] Fuites mémoire

4 réponses
Avatar
Romain PETIT
Salut,

je viens de lire en face qu'une solution API (cf ci-dessous) permet de
libérer la mémoire utilisée par les programmes WD (de la même façon que
l'iconisation/restauration de l'appli)

Quelqu'un a-t-il un retour (positif ou pas) sur cette fonction,
notamment pour des programmes fonctionnant en service ?

Sinon, je vais m'empresser de tester cela...
Ca fait un bon moment que je n'ai pas de solution à ces problèmes,
hormis d'arreter et relancer automatiquement mes programmes
quotidiennement.

A+


http://forum.pcsoft.fr/post.awp?id=85866

**********************************
// 2005 Fabrice De Weerd.
// http://fdw.dontexist.com
//
PROCEDURE apiSwapToVM()
// Swap to Virtual Memory

LOCAL
nHdl est un entier = 0

SI SysVersionWindows() _DANS_ ("NT 3.5","NT 4","NT
5","XP","2003S","VISTA") ALORS
nHdl = API("KERNEL32","GetCurrentProcess")
API("KERNEL32","SetProcessWorkingSetSize",nHdl,-1,-1)
FIN



--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)

4 réponses

Avatar
Daniel
Salut,

Romain PETIT a écrit :
Salut,

je viens de lire en face qu'une solution API (cf ci-dessous) permet de
libérer la mémoire utilisée par les programmes WD (de la même façon que
l'iconisation/restauration de l'appli)

Quelqu'un a-t-il un retour (positif ou pas) sur cette fonction,
notamment pour des programmes fonctionnant en service ?

Sinon, je vais m'empresser de tester cela...
Ca fait un bon moment que je n'ai pas de solution à ces problèmes,
hormis d'arreter et relancer automatiquement mes programmes
quotidiennement.

A+


http://forum.pcsoft.fr/post.awp?id…866

**********************************
// 2005 Fabrice De Weerd.
// http://fdw.dontexist.com
//
PROCEDURE apiSwapToVM()
// Swap to Virtual Memory

LOCAL
nHdl est un entier = 0

SI SysVersionWindows() _DANS_ ("NT 3.5","NT 4","NT
5","XP","2003S","VISTA") ALORS
nHdl = API("KERNEL32","GetCurrentProcess")
API("KERNEL32","SetProcessWorkingSetSize",nHdl,-1,-1)
FIN






Si tes services figent par accroissement, normalement devrait faire
l'affaire.

J'utilise le code ci-dessous, et m' a permis de résoudre les problèmes
de libération de mémoire. En fait, je l'avais tiré du thread dont tu
parles, c'est pour cela que je l'ai communiqué sur la liste en face.

Toutefois attention, je ne suis pas persuadé qu'il s'agisse de fuite,
mais plus de libérer de la mémoire réservée qui ne se libère pas
automatiquement. Mais que tu peux faire avec des utilitaires tel que
"empty.exe".



Le seul effet que j'ai constaté est un ralentissement de l'appli, qui
doit recharger le code libéré.


PROCEDURE FREE_MEM()
Xl_nHDL est entier
RetourFonction est un entier

SI SysVersionWindows(sysVersionPlateForme)="NT" ALORS
Xl_nHDL=API("Kernel32","GetCurrentProcess")
RetourFonction=API("psapi","EmptyWorkingSet",Xl_nHDL)
SI RetourFonction = 0 ALORS
Erreur(ErreurInfo())
RETOUR
FIN
FIN


--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
Romain PETIT
Daniel a exposé le 16/02/2007 :
Salut,



Salut,

PROCEDURE apiSwapToVM()





PROCEDURE FREE_MEM()



Ok, je vois ici que les 2 API font la même chose (EmptyWorkingSet est
juste appellée par une DLL supplémentaire, psapi)

http://discuss.develop.com/archives/wa.exe?A2=ind0601d&L­vanced-dotnet&D=0&O=D&T=0&PP35

Merci,
A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Après mure réflexion, Daniel a écrit :
Salut,



Salut,

PROCEDURE apiSwapToVM()


PROCEDURE FREE_MEM()



Si tes services figent par accroissement, normalement devrait faire
l'affaire.



Je reste dubitatif.
Je vois ici et là que ce n'est qu'un cache misère et que le remede
risque d'être pire que le mal :
http://www.bitsum.com/winmemboost.asp
http://groups.google.fr/group/borland.public.cppbuilder.nativeapi/browse_frm/thread/656eae8ed23df311

En fait, il s'agit seulement de transférer sur le disque ce qui est
occupé par la RAM (un swap).
Ca ne regle pas le fait que l'appli en question libère mal la mémoire
consommée.
Pire ! Il semble que cela grignotte les performances et risque de
pertuber l'OS dans sa gestion de la RAM...

Un retour d'expérience dans le monde réel et sur le long terme serait
le bienvenu...
En attendant de pouvoir faire des tests plus poussés, je retourne à mon
ancienne stratégie (fermeture auto qutodienne des applis et relance par
XYNTService).

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Daniel
Salut,
Romain PETIT a écrit :
Après mure réflexion, Daniel a écrit :
Salut,



Salut,

PROCEDURE apiSwapToVM()


PROCEDURE FREE_MEM()



Si tes services figent par accroissement, normalement devrait faire
l'affaire.



Je reste dubitatif.
Je vois ici et là que ce n'est qu'un cache misère et que le remede
risque d'être pire que le mal :
http://www.bitsum.com/winmemboost.asp
http://groups.google.fr/group/borland.public.cppbuilder.nativeapi/browse_frm/thread/656eae8ed23df311


En fait, il s'agit seulement de transférer sur le disque ce qui est
occupé par la RAM (un swap).
Ca ne regle pas le fait que l'appli en question libère mal la mémoire
consommée.
Pire ! Il semble que cela grignotte les performances et risque de
pertuber l'OS dans sa gestion de la RAM...

Un retour d'expérience dans le monde réel et sur le long terme serait le
bienvenu...
En attendant de pouvoir faire des tests plus poussés, je retourne à mon
ancienne stratégie (fermeture auto qutodienne des applis et relance par
XYNTService).

A+




C'est pour cela que que j'avais mis un avertissement et qu'on ne parlait
pas de fuite mémoire.

La fonction permet uniquement de libérer la RAM servant de cache à
l'application, ce qui fait qu'elle diminue les performances de
l'application, mais aide tout de même windows à libérer ce cache, que
Windows a parfois du mal à libérer.

@+


--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)