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

  • From: Zimler Attila Tamas <hijaszu@xxxxxxxxxxxx>
  • To: eaf@xxxxxxxxxxxxx
  • Date: Sun, 11 May 2008 22:37:36 +0200

Schmuck Ákos wrote:

Sziasztok!
Ha kicsit késve is, de bekapcsolódnék a beszélgetésbe... Szóval tesztelgettem a problémát, meg közben Google-özgettem egy kicsit, és úgy a második-harmadik kulccsszó kombinációra (c# dispose winforms) első helyen kiadott egy lapot amivel a gond megoldható (javítható), bár nem autómatikusan, de azért talán kezelhető mértékben.
A link:
http://www.reflectionit.nl/Blog/PermaLink7a2db2fc-eff3-4ad0-9e8c-2a8392a60c29.aspx
A lényeg: Modálisan megjelenített ablakoknak a Dispose fv-e nem hívódik meg autómatikusan! Csináltam egy kis példaprogit (előre is bocs, egy-két elég csúnya dolgot csinálok benne :) ami szépen demonstrálja a dolgot. Mivel ha jól rémlik TabControl / TabPage-ekről volt szó, én is egy TabControl-t tettem fel, egy gombbal lehet bele pakolgatni TabPage-eket, minden TabPage-en egyetlen származtatott label van, ami nem csinál mást, mint konstruktorra kiírja, hogy ő létrejött, Dispose-ra meg kiírja hogy halálán van :) Alul van három gomb, szépen meg lehet figyelni, hogy a sima Show, ill. a "módosított" ShowModal szépen műxik, de a sima ShowModal-ra egy Dispose sem hívódik meg (direkt kiraktam egy gombra a GC.Collect() -et, de persze ez nem a gond forrása, nem is segít)

A "módosítás" egyébként csak annyi, hogy egy 'using' blokkba raktam a form megjelenítését. Tehát ha minden helyen, ahol modálisan jelenítetek meg ablakot, átírjátok using-ra (vagy a cikkben mutatott try/finally-s megoldásra) akkor minden olyan leak-et bezártatok, ami a control-okhoz kötődik (saját osztályok persze maradnak, de ha azokat pl. a formon deklaráltátok, akkor a form Dispose-át lehet override-olni, és be lehet oda tenni a saját osztályok Dispose-át) Nem tudom ez mennyi munka, de talán kevesebb, mint leak-eket keresgélni...

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.

--
Az eletben vannak szabalyok
Nehanyat meg lehet kerulni, a tobbit pedig meg lehet szegni
(The Matrix)

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: OpenKeyServer v1.2
Comment: Extracted from belgium.keyserver.net

mQGiBEE/HTYRBACInacMGc8B/lkX3CXh5D9wUDlmza4hoatNZjJmWNnPWC9c0h2V
Pi9zYJ1bVqeUnNDzCRpovPdwrswWvb9WpVOS0A7TafzWxCYud6gN8g5KiC7cSuJV
cxI0uv3jWSjUkLnECqTpm9piM4WptXrdFLxUyrKPu+Nl82QSjfdbB+8xXwCg+rWO
KeOZZGGGIYWu+rZ0M/MqyCUD/jqQVc7alF8+5y//zNDml3THTc3ljK8CLcHxFv6F
uADmvHSePRTR1ACBV3dTxL8awvanRsXC25LOuYgM1hF9RRwof59xNtXVttvo724b
FDR+oRDVKyoEm6Istfn9xbbNqRqPfk83SHvect/hlHsfgaTBKd+IRAEkbMIdRin/
E45fA/0bzklqLGj4a8qSxMMvZ1Ib+2RmH5I6o9o33FY3Nmc7IEXJizyTyQaASYCx
ldjuRmfWSOP3gQRrH5owuZq5KBCC/PNMNnUsA4noFmvIilA/9UYqMtQ0BNr+miIM
9/LV70ZbBHVpDLjb2baMjbKrmCFf9rjlc17fFsWk5ZJuE3/UxLQrWmltbGVyIEF0
dGlsYSBUYW3DoXMgPGhpamFzenVAaGxmc2xpbnV4Lmh1PohXBBMRAgAXBQJBPx02
BQsHCgMEAxUDAgMWAgECF4AACgkQ+3OFVYni0PSysACffD6VDtoer3aBe8Gpvn8e
gwiNNH8AmwcmBIrZeCOeobIuZZp3CCOgQblIuQENBEE/HTkQBACKNzv7gS0fgeiO
AMoss2bbO7X9GuO3ufc3+zx2yGV7SvYAuyWLOSMhs1ZYBVp6IawDY88zEx81oxRj
Jd4zO8h/3BI9cmjZ4NAmdv7lWjTs0I0ijFnemcFQaffxN8vIB9DqA4oyJ0A/bS7J
0E/i13sr7hRgB6NZbpy4PSSkczggvwADBQP8D3eakqeJHf1yLmw1XmQVDxHLxtrI
VL0TShFEfMGU/MLfKpcmrd43EsSondsNNm8jv4b9Y/Wgc8XPQQrfPodC5mKt8mQC
F/ovWBFs46YvhS5pojQmp6i9octTWw2OqVn3QgrBFqm4QvayLE9wRLm/xgaFApVI
4RiOOEA6SidURGCIRgQYEQIABgUCQT8dOQAKCRD7c4VVieLQ9HoZAJ4xR5Y1qlnC
LTn1GkbEW0Va+72EqwCfQTP37ylZGrvpYnFoewBIMuLFHM8=
=K0/l
-----END PGP PUBLIC KEY BLOCK-----


Other related posts: