Je souhaiterais vous solliciter sur le bout de code que j'ai développé et qui me cause des soucis :
1/ Ce programme ouvre une fenêtre principale
2/ Clic droit puis "Ajouter"
3/ Une nouvelle fenêtre s'ouvre. En l'état le programme ne doit pas prendre plus de 4 Mo en mémoire (voir dans le gestionnaire de taches, onglet processus)
Mais si on décommente, dans la procédure ajout_client au moins une des 8 lignes commentées, mon programme alloue une quantité de mémoire supérieure à 70 Mo.
a) Constatez vous ce problème ?
b) Si oui, a quoi cela est-il du ? Comment peut on résoudre ce problème ?
D'avance, mille merci de vos réponses / conseils.
Cf code ci dessous :
Code : Tout sélectionner
Structure Client
nom.s
ip.s
port.s
EndStructure
NewList Client.Client()
#Fen_1=0
#Fen_2=1
#Select_ini=0
version1 = 0
version2 = 0
version3 = 7
Flag=0
#WindowWidth = 500
#WindowHeight = 400
Procedure Ajout_client(value)
flag2=0
Fen_Aj=OpenWindow(32,200,200,250,250,#PB_Window_WindowCentered |#PB_Window_SystemMenu,"Ajout d'un client")
CreateGadgetList(WindowID(32))
;TextGadget(Fen_Aj+1,35,10,130,40,"Nom du nouveau client")
;StringGadget(Fen_Aj+2,30,30,130,20,"")
;TextGadget(Fen_Aj+3,50,60,100,40,"Adresse IP du client")
;IPAddressGadget(Fen_Aj+4,30,90,130,20)
;TextGadget(Fen_Aj+5,50,120,100,40,"Port du patio_server")
;StringGadget(Fen_Aj+6,30,150,130,20,"")
;ButtonGadget(Fen_Aj+7,50,200,40,20,"OK")
;ButtonGadget(Fen_Aj+8,120,200,50,20,"Annuler")
Repeat
eventid3=WaitWindowEvent()
If eventid3=#PB_Event_Gadget
Select EventGadgetID()
Case (Fen_Aj+7); On valide
CloseWindow(32)
Case (Fen_Aj+8); On annule
flag2=1
eventid3= #PB_EventCloseWindow
EndSelect
EndIf
Until Eventid3= #PB_EventCloseWindow
CloseWindow(32)
EndProcedure
;- Début du programme
If CreatePopupMenu(12)
MenuItem(13,"Ajouter")
EndIf
If OpenWindow(#Fen_1, 200, 120, #WindowWidth, #WindowHeight, #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered , "XXX "+Str(version1)+"."+Str(version2)+Str(version3))
clients=0
AddElement(Client());
Client()\nom="Test"
Client()\ip="192.168.1.1"
Client()\port="23"
If CreateGadgetList(WindowID())
fenetre=WindowID()
ListIconGadget(1,50,60,380,250,"Clients",359)
ResetList(Client())
While NextElement(Client())
AddGadgetItem(#Fen_2,-1,Client()\nom+" [ "+Client()\ip+" ; "+Client()\port+" ]")
Wend
EndIf
Repeat
EventID=WaitWindowEvent()
Debug eventid
If EventID=#PB_EventGadget
Select EventGadgetID()
Case 1
Select EventType()
Case #PB_EventType_LeftDoubleClick
choix=GetGadgetState(1)
If choix <>-1
CloseWindow(#Fen_1)
Flag=1
EndIf
Case #PB_EventType_RightClick
DisplayPopupMenu(12,fenetre)
EndSelect
EndSelect
EndIf
If EventID=#PB_EventMenu
choix=GetGadgetState(1)
Select EventMenuID()
Case 13 ; Ajout d'un client
Ajout_Client(choix)
EndSelect
EndIf
Until EventID=#PB_EventCloseWindow Or Flag=1
EndIf