C++/CLI'da
Process::GetProcessesByName("myProcessName")
ya da C#/VB.NET'e uyarlarsak
Process.GetProcessesByName("myProcessName")
bu kadar basit bir kod ne sorun yaratabilir ki di mi? Benim makinemde 350-400 KB'lık bir memory leak yaratıyor. Her 5 sn'de bir bu kodu çağırıp bir process'in ayakta olup olmadığını kontrol etmeye kalktığımda 15 sn'de 1Mb, 15-20 dk içersinde de 4 GB (!) kadar memory leak yaratma potansiyeli var. Garbage Collector mal gibi olan biteni izliyor, müdahele etmiyor.
Olay da şu. Verdiğiniz process ismini ararken açık tüm processlerden birer obje yaratıyor ama hiçbirini dispose etmiyor. Size de bir referansını döndürmediği için sizin de dispose etme şansınız olmuyor. Yani her halikarda bulunamayan tüm processler ciddi bir memory leak yaratıyor. Bunun yerine siz kendiniz bir loop ile GetProcesses() üzerinden aynı işlemi yaparsanız sorun yok. .NET'in hazır ve nazır bu muhteşem metodunu kullanmaya çalışırsanız vay halinize.
Benim gibi uzun süre memory leak'in kaynağını bulmaya harcamayın diye yazıyorum. GetProcessesByName() cıstır, bu böyle biline.
P.S: En azından .NET Framework 3.5'e kadar böyle, belki sonrasında çözmüşlerdir, araştırmadım.