.Net platormunda memory leak olur mu?

7 views
Skip to first unread message

Abdulkadir Bener

unread,
Jun 14, 2013, 3:09:22 AM6/14/13
to bnr...@googlegroups.com
Dün bir projemle ilgili şikayet aldım.
Bir form var. İçinde bir timer var. Süre bitince mesaj veriyor filan.
Bu formdan üretmişim, ekrana almışım, işim bitmiş ve hafızadan silmişim (dispose etmişim).
Sonra alakasız bir ekranda süre bitti diye mesaj geliyor.
 
Tam bir memory leak durumu.
Ama ben .Net 4.5 kullanıyorum.
Garbage Collection neden işe yaramamış?
GC yalan mıdır?
DotNet içinde memory leak olur mu?
Nesneyi dispose etmişim.
GC.Collect demişim. Daha ne demeliyim?
 
Araştırınca gördüm ki arada bir bu durum olabiliyormuş.
Özellikle WPF ve Silverlight uygulamalarda dikkatli olmak gerekliymiş.
WPF ve Silverlight birtakım şeyleri doğru kodlayacağınızı varsayıyor.
Bu şeylerin tam listesini öğrenince ayrıca paylaşmak isterim bir ara.
Bilen varsa paylaşmasını da isterim elbette.
 
Peki ben bu doğru yöntem denen şeyleri bilmiyorum ve de memory leak yaşamışım.
Bu memory leak neden hangi koddan, hangi noktadan kaynaklanmış nasıl bulacağım?
 
Cevabı aşağıdaki makalede:
 
 
Herkese saygılar.
 

İbrahim Bener

unread,
Jun 14, 2013, 5:06:06 AM6/14/13
to bnr...@googlegroups.com, Abdulkadir Bener
Abi senin senaryonla ayn� m� bilemiyorum ama ekte k���k bir �rnek uygulama var.
�rnekte a��lan ikinci formu kapatmana ve hatta dispose etmene ra�men timer1 �al��maya devam ediyor.

Normalde formu dispose etti�inde o scope ta �retilen t�m nesneler yok edilir.
Ancak timer1 hatta form da ya�amaya devam ediyor ki, timer1 formun ve fomda bulunan bir nesnenin propertilerini hata almadan de�i�tirebilmeye devam ediyor.
Sebebi timer'�n ikinci bir thread a�mas� ve bu threadin sonlanmamas�.

Mesela timer2 form dispose edilince sonlan�yor.
��nk� timer1 den farkl� olarak formun "components" konteyn�r�na dahil.
Yani formun dispose metodu �a��r�ld���nda otomatikman timer2'nin de dispose metodu �a��r�lm�� oluyor ve threadi sonlan�yor.

�stteki �rnek asl�nda bir GC problemi de�il. Ancak yine de bir leak olu�uyor.
E�er async �al��an y�ntemler kullan�l�yorsa veya multi thread bir uygulama geli�tiriyorsan, i�in rengi koda g�re de�i�ebilece�inden bu t�r �eyleri tamamen GC'ya b�rakmamak gerekiyor.



-------- Original Message --------
Subject: .Net platormunda memory leak olur mu?
From: Abdulkadir Bener <abdulka...@gmail.com>
To: bnr...@googlegroups.com
Date: 14.06.2013 10:09:22
D�n bir projemle ilgili �ikayet ald�m.
Bir form var. ��inde bir timer var. S�re bitince mesaj veriyor filan.
Bu formdan �retmi�im, ekrana alm���m, i�im bitmi� ve haf�zadan�silmi�im (dispose etmi�im).
Sonra alakas�z bir ekranda s�re bitti diye mesaj geliyor.
�
Tam bir memory leak durumu.
Ama ben .Net 4.5 kullan�yorum.
Garbage Collection neden i�e yaramam��?
GC yalan m�d�r?
DotNet i�inde memory leak olur mu?
Nesneyi dispose etmi�im.
GC.Collect demi�im. Daha ne demeliyim?
�
Ara�t�r�nca g�rd�m ki arada bir bu durum olabiliyormu�.
�zellikle WPF ve Silverlight uygulamalarda dikkatli olmak gerekliymi�.
WPF ve Silverlight birtak�m �eyleri do�ru kodlayaca��n�z� varsay�yor.
Bu �eylerin tam listesini ��renince ayr�ca payla�mak isterim bir ara.
Bilen varsa payla�mas�n� da isterim elbette.
�
Peki ben bu do�ru y�ntem denen��eyleri bilmiyorum�ve de memory leak ya�am���m.
Bu memory leak neden hangi koddan, hangi noktadan kaynaklanm�� nas�l bulaca��m?
�
Cevab� a�a��daki makalede:
�
�
Herkese sayg�lar.
�
--
Bu e-postay� Google Gruplar�'ndaki "bnr_net" adl� gruba abone oldu�unuz i�in ald�n�z.
Bu grubun aboneli�inden ��kmak ve bu gruptan art�k e-posta almamak i�in bnr_net+u...@googlegroups.com adresine e-posta g�nderin.
Daha fazla se�enek i�in, https://groups.google.com/groups/opt_out adresiniz ziyaret edin.
�
�

TimerTest.7z
Reply all
Reply to author
Forward
0 new messages