sto sviluppando, per lavoro, un soft di backup
praticamente finito ... sto correggendo migliaia di bug ... ed oggi ne ho scoperto uno nuovo ... VERAMENTE strano ... LOL
in pratica dopo 10/15 minuti di esecuzione di backup continui, durante i test su 98, mi sono accorto che andava in crash
dopo 3/4 prove ho fatto una prova su xp ... e anche li su tutto in crash
e mi son detto ... LOL ... che cavolo può essere?
la cosa veramente strana è che mi compariva al posto dei bottoni, checkbox, icone, immagini e co dei rettangoli con un bordo rosso, di sfondo bianco con le diagonali rosse (di solito mi succede quando finisce la memoria e non riesce ad allocare l'oggetto grafico) ... e stavo tentando di capire cosa succedeva
dopo svariate correzioni al codice, che comunque non hanno sistemato il problema, mi è venuta un'idea: ricorriamo ai tool di sysinternals
Ho scaricato il BELLISSIMO process explorer e mi sono monitorato il processo
Sapete cos'ho scoperto? che effettivamente c'era un leak ... ma non un memory leak ma un handle leak
in pratica tutti gli "elementi" grafici che vedete a video hanno un "codice identificativo", che corrisponde ad un'intero di 2 byte, quindi max 65 mila e qualcosa ... ecco ... il mio software ne generava 50 al secondo circa ... collassando il sistema
cosi, siccome ho svariati controlli che ho scritto a mano ... me li sono passati TUTTI al vaglio, corretti dei possibili handle leak il problema sussisteva ... vi giuro ... non capivo cosa diavolo era!
Al che ... mi è venuto un dubbio ... il software ha un'iconcina in basso a destra che fa vedere che il software lavora e c'è tipo un serverino non in basso a destra un segnalatore che mostra che lavora (tipo l'animazione che ha ff a sinistra del titolo nella tab mentre carica, solo che verde e più corto)
... ecco ... ho aperto il codice ... ed ho visto che avevo scritto una MEGA boiata: in pratica a ogni "cambiamento" della icona ricaricavo dalle risorse del software (contenute nell'eseguibile) l'icona instanziando un nuovo oggetto ... LOL non solo rallentavo OLTRE modo le operazioni, ma inizializzavo una nuova "icona" a rotazione
sistemato questo ... adesso gli oggetti grafici (ergo GDI Handle) stanno intorno ai 70/80 (dipende se compaiono finestre di avviso o altro)
direi DECISAMENTE una cifra molto più accettabile
che odissea ... LOL


LinkBack URL
About LinkBacks



Rispondi Citando




Segnalibri