Requette dans Thread et memory Leak

3 réponses
Avatar
Fredo
Bonsoir,

Dans un thread manuel (threadexecute, utilisation d'hyperfile) je fait
une requête sur un fichier afin de tester quelques enregistrements.


Boucle
Si hexecuteRequeteSQL(MaRequette,....) alors
hlitpremier(MaRequette)
Tantque pas hendehors()
// Traitement

hLitSuviant(Marquette)
Fin
HlibereRequette(MaRequette)
fin
ThreadPause(100)

si faux alors sortir

fin


Je me retrouve avec une augmentation constante de l'utilisation de
mémoire (executable ou mode test) de quelques dizainnes de ko jusqu'a la
fermeture de la fenêtre exécutant le thread.

Si vous avez des pistes pour résoudre cette fuite de mémoire.

Merci d'avance,

Fred.

3 réponses

Avatar
Fredo
Le 09/12/2011 22:16, Fredo a écrit :
Bonsoir,

Dans un thread manuel (threadexecute, utilisation d'hyperfile) je fait
une requête sur un fichier afin de tester quelques enregistrements.


Boucle
Si hexecuteRequeteSQL(MaRequette,....) alors
hlitpremier(MaRequette)
Tantque pas hendehors()
// Traitement

hLitSuviant(Marquette)
Fin
HlibereRequette(MaRequette)
fin
ThreadPause(100)

si faux alors sortir

fin


Je me retrouve avec une augmentation constante de l'utilisation de
mémoire (executable ou mode test) de quelques dizainnes de ko jusqu'a la
fermeture de la fenêtre exécutant le thread.

Si vous avez des pistes pour résoudre cette fuite de mémoire.

Merci d'avance,

Fred.





Complément d'information, si je remplace la requette par un hfiltre,
hlitpremier, ... il n'y a plus de soucis.

Cela semble donc bien être lié à la requette.

Fred
Avatar
tjfromparis
tu peux essayer une syntaxe légèrement différente

Maproc (=> dans un thread)
boucle
Fonction_controle()
fin
Fin



Fonction_controle (avec copie de contexte non threadé)
Si hexecuteRequeteSQL(MaRequette,....) alors
hlitpremier(MaRequette)
Tantque pas hendehors()
// Traitement

hLitSuviant(Marquette)
Fin
HlibereRequette(MaRequette)
fin
si faux alors sortir
fin



On 10 déc, 08:56, Fredo wrote:
Le 09/12/2011 22:16, Fredo a écrit :









> Bonsoir,

> Dans un thread manuel (threadexecute, utilisation d'hyperfile) je fait
> une requête sur un fichier afin de tester quelques enregistrements.

> Boucle
> Si hexecuteRequeteSQL(MaRequette,....) alors
> hlitpremier(MaRequette)
> Tantque pas hendehors()
> // Traitement

> hLitSuviant(Marquette)
> Fin
> HlibereRequette(MaRequette)
> fin
> ThreadPause(100)

> si faux alors sortir

> fin

> Je me retrouve avec une augmentation constante de l'utilisation de
> mémoire (executable ou mode test) de quelques dizainnes de ko jusqu'a la
> fermeture de la fenêtre exécutant le thread.

> Si vous avez des pistes pour résoudre cette fuite de mémoire.

> Merci d'avance,

> Fred.

Complément d'information, si je remplace la requette par un hfiltre,
hlitpremier, ... il n'y a plus de soucis.

Cela semble donc bien être lié à la requette.

Fred
Avatar
Fredo
Salut,


Problème résolu ... et cela ne vient pas directement de la requête.

Pour aller vite car je ne me rappelais plus de la fonction SQL
équivalente du position de windev (instr) j'ai testé la position d'une
chaine en mettant :

"Where wl.position(MaVal,'TOTO')" au lieu de "Where instr(MaVal,'TOTO')"

et c'est le wl.position qui provoque le memory leak. J'ai modifié le
code et tout roule à nouveau et j'ai remonté l'info à PCSOFT.

Merci encore.

Fred

Le 12/12/2011 09:39, a écrit :
tu peux essayer une syntaxe légèrement différente

Maproc (=> dans un thread)
boucle
Fonction_controle()
fin
Fin



Fonction_controle (avec copie de contexte non threadé)
Si hexecuteRequeteSQL(MaRequette,....) alors
hlitpremier(MaRequette)
Tantque pas hendehors()
// Traitement

hLitSuviant(Marquette)
Fin
HlibereRequette(MaRequette)
fin
si faux alors sortir
fin



On 10 déc, 08:56, Fredo wrote:
Le 09/12/2011 22:16, Fredo a écrit :









Bonsoir,



Dans un thread manuel (threadexecute, utilisation d'hyperfile) je fait
une requête sur un fichier afin de tester quelques enregistrements.



Boucle
Si hexecuteRequeteSQL(MaRequette,....) alors
hlitpremier(MaRequette)
Tantque pas hendehors()
// Traitement



hLitSuviant(Marquette)
Fin
HlibereRequette(MaRequette)
fin
ThreadPause(100)



si faux alors sortir



fin



Je me retrouve avec une augmentation constante de l'utilisation de
mémoire (executable ou mode test) de quelques dizainnes de ko jusqu'a la
fermeture de la fenêtre exécutant le thread.



Si vous avez des pistes pour résoudre cette fuite de mémoire.



Merci d'avance,



Fred.



Complément d'information, si je remplace la requette par un hfiltre,
hlitpremier, ... il n'y a plus de soucis.

Cela semble donc bien être lié à la requette.

Fred