System.OutOfMemoryException: Out of memory hatası, Asp.Net'te yazılımcı arkadaşların Memory Leak kavramı ile tanışmasını sağlayan meşhur hatadır. Detaylı bilgiler almak isteyenler stackoverflow üzerinden vaka bazlı araştırmalar yapabilirler ama ben bu hatanın en sık karşılaşıldığı iki senaryodan ve çözümlerinden bahsedeceğim. Ama yine Garbage Collector nedir ve ne gibi durumlarda nasıl kullanılır her yazılımcının mutlaka bilmesi gerekir.
Birincisi sonsuz döngü hatalarında özellikle önbellek kullanımları da aktif hale getirildiyse sistemlerde yetersiz bellek (out of memory) hatası ortaya çıkıyor, hatanın bellek yetersizliğinden kaynaklandığını anlamak için de try catch blokları kullanılması gerekiyor.
İkinci ve özellikle web uygulamalarında OutOfMemoryException hatası oluşmasının sebebi ise Dispose edilmeyen database bağlantıları. Örneğin bir e-ticaret sistemindeki ürünleri ve ürünlere ait görselleri alt alta for döngüleri kullanarak çekiyorsunuz ve veritabanında da binlerce ürün var. Dolayısıyla bir sayfa yüklemesinde 1 kere binlerce satır veri tutan bir ürünler tablosu çektikten sonra altında binlerce kez döngü başlatmış oluyorsunuz, yani alt for döngüsündeki ürünler veri setini binlerce kez veritabanı bağlantısı kurarak çekmeye çalışıyorsunuz. Bu zaten bir mantık hatasıdır ama acil durumlarda böyle bir adapter kullanmayı tercih ettiyseniz de bağlantıya ait Connection ve Datatable/Dataset instance'larını mutlaka Dispose etmelisiniz. İngilizce terimleri kullanmaya çok özenen birisi olmasam da maalesef yazılım terminolojisinin ortak dili bu. Dispose terimi tüm programlama dillerinde aynı işlemi ifade eder ve tam olarak bir Türkçe karşılığı da yok.
Bir de yazılımcıların meşhur "lokalde çalışıyor ama sunucuda patlıyor" klişesi var ki bu da her sunucunun özelliklerinin farklı olduğu gerçeğine dikkat etmemiz gerektiği anlamına geliyor. Lokalde çalıştırıp da production server'a deploy ettikten sonra nasıl olsa çalışır deyip bilgisayarınızı kapatmayın, mutlaka kontrol edin :)