Bonjour à tous,
j'ai déjà envoyé des posts sur un problème que j'ai pas toujours résolus, Un problème de plantage sporadique et en fonction de son utilisation, avec un "OutOffmemory".
Je suis peut être sur une voie et j'aimerai avoir votre avis avant de commencer une grosse modification de mon code !!.
je vais essayer d'être le plus clair possible. je suis sous delphi7 et XP, et m'excuse d'avance sur la longueur du post !
1° Le logiciel :
Il est basé sur une "form" maitresse, qui fait appel à des DLLs qui possèdent leur propre "form" et sont donc toutes autonomes, en fait ces DLLs sont des outils au programme principal.
En règle générale un seul outil est ouvert à la fois, et j'utilise la même structure de création de mes form dans chaque DLL.
2° les créations de mes forms
3° Ce qui m'a mis sur une voie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 // si la fenêtre est visible, fonctionnement normal. function ExConfigLogicielle:integer;stdcall; begin result:=0; if assigned(FCongLog) then begin FCongLog.Release; FCongLog:=nil; end; FCongLog:=TFCongLog.create(application); try FCongLog.Showmodal; finally FCongLog.Release; FCongLog:=nil; end; result:=0; end; //----------------------------------------------------------------------------- // si la fenêtre est invisible, appel de fonction sans décision d'utilisateur function ExLitIndiceConfigLogicielle(index:integer):Pchar;stdcall; begin result:=''; if assigned(FCongLog) then begin FCongLog.Release; FCongLog:=nil; end; FCongLog:=TFCongLog.create(application); try Indice:=index; FCongLog.litConfig; FCongLog.LitOption; result:=pchar(EtatIndice); FCongLog.close; finally FCongLog.Release; FCongLog:=nil; end; result:=0; end;
D'une part, certains clients m'ont dis que le plantage arrivait le plus souvent quand ils ouvraient rapidement des outils, comme si il fallait attendre qu'une fiche soit bien fermé et son processus terminé avant d'en ouvrir une autre !!.
D'autre part, j'ai une Dll qui possède la configuration et les options du logiciel, celle Dll est souvent utilisé en mode "form" non visible pour lire les options.
La fiche est créée et détruite à chaque lecture d'une option et peut parfois lire plusieurs options consécutivement, (c'est la fonction donnée ci-dessus ExLitIndiceConfigLogicielle(index:integer)). Et j'ai constaté que ce plantage arrivé aussi le plus souvent quand je lis des options consécutivement.
Pour Imager, supposons le code suivant qui peut illustrer la lecture de plusieurs options...ou je crée et détruit 20 fois la fiche qui se trouve dans la DLL ... et cela rapidement dirons nous..
Voila j'espère avoir été clair et indiqué assez d'infos..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Procedure Form1.Toto; var i: integer; begin for i:=1 to 20 do S:=ExLitIndiceConfigLogicielle(i); end;
Donc à votre avis, ce codage est il correct ? peut il avoir une incidence sur mon problème de mémoire, dois je continuer dans cette voie.. en deux mot qu'en pensez vous ??
Toutes les idées ou critiques seront le bien venu et merci d'avance.
Partager