[eaf] Re: [eaf] Re: Referencia számlálás

  • From: "Schmuck Ákos" <kossch@xxxxxxxxx>
  • To: eaf@xxxxxxxxxxxxx
  • Date: Mon, 12 May 2008 20:39:06 +0200

Hahó! :)


> Az eredeti problémának semmi összefüggése nincs modális ablakokkal, a
> TableLayoutPanel.Controls.Clear() kapcsán került elő a probléma.


Hmm... Ez biztosan így van, de ugye nem gondolod, hogy így egy mondattal
lerázhatsz engem :)

Lássuk csak: Az én kis kísérletemből (amiben sikerült egy hasonló - ha nem
ugyanazt a - problémát modellezni (tudniillik, hogy bizonyos esetekben az
ablak bezáródása után sem hívódnak meg a "Clear()-ezett" Dispose-ok, és
egyetlen esetben sem hívódnak meg az ablak bezáródása előtt ) ) az derült
ki, hogy:
   1) a Control-ok Dispose fv-eit (látszólag) nem felejti el meghívni, csak
szépen egy csokorba gyűjtve rendezi le az ablak bezárásakor.
   2) na ezt a "csokrot" végrahajtani egy speciális - bár valljuk be, nem is
olyan ritka - esetben szó nelkül elfelejti elintézni.
   3) Minden más esetben autómatikusan meghívódnak a Dispose-ok (igaz, nem
"azonnal", hanem az ablak bezáródásakor; tegyük hozzá, ez a példa program
"laboratóriuminak" nevezhető körülményei között történt, bár persze ha a
való világban megbukik, arra is tudni kéne kódot adni ;)
   4) A "helyes" viselkedés (pontosabban az amit hivatott csinálni, lásd 1
:) egy kis kódtöredékkel minden előrelátható esetben garantálható.

A te gondod - meglátásom szerint - a következő 2 egyike:
  A) Máshol is szivárognak a Dispose-aink (még ha a memóriánk nem is :)
  B) Nagyon-nagyon(-nagyon :) sokáig kint van az adott ablak, közben ezerrel
röpködnek a dinamikusan létrehozott control-jaink, és gyakorlatilag teljesen
mind1, hogy mire az ablak bezáródna minden "letisztulna", ha egyszer már
jóval a bezáródás előtt elfogynak az erőforrásaink.

Namost: A / B okok közül melyik az, amiért "Az eredeti problémának semmi
összefüggése nincs modális ablakokkal" ? :P
case "A": az új - egyelőre "fantom" - léket demonstráló kódot plíz :)
case "B": ÁHÁ!!! :D Szóval igenis van köze az ablakhoz! <diadalmas vigyorral
mered a monitorra> :D

A válaszodból nekem úgy tűnik, a B) eset áll fenn (bár akármi is van, ha
sikerült többet kideríteni a jelenségről, egy kicsit részletezhetnéd a
fentiek fényében). Ha ezzel lokalizáltuk a problámát, már csak stratégiát
kell választani:
   - "a laza programozó" stratégia: Garantáljuk, hogy nem marad fent az
ablak "túl sokáig" (mondjuk adott - pl. random - időközönként bezárjuk az
ablakot, gondosan ügyelve, hogy a felhasználó minden változtatása elvesszen.
Esetleg a művelet előtt erről egy MessageBox-ban értesítjük a user-t) aztán
elmegyünk fagyizni (mert a laza programozók mind fagyiznak :)
   - "az IQ-m legalább 2 nagyságrenddel nagyobb mint a tiéd" programozó
stratégiája: Implementálunk egy saját Dispose-oló vagy "lék-figyelő"
stratégiát (Nice one, pody!! ;) aztán elvonulunk egy csendes szobába és
elkezdjük számolgatni az IQ-nkat.
   - az "Áááááh, hagyjuk!... <INSERT látványos legyintés>" stratégia:  ...
Áááh, hagyjuk! <látványosan legyint> :D

Amúgy majd kíváncsi lennék, hogy végülis mit döntöttetek, hogyan
orvosoljátok a problémát... :)

Üdv.:
Ákos :)

Other related posts: