Projemizde Red Gate yazılımıyla Ants Profiler Pro'yu kullandık . Tüm .NET dil tabanlı uygulamalar için gerçekten iyi çalışır.
.NET Çöp Toplayıcı'nın bellek içi nesneleri temizlemede çok "güvenli" olduğunu gördük (olması gerektiği gibi). Nesneleri , gelecekte bir süre kullanıyor olabileceğimiz için çevresinde tutacaktır . Bu, bellekte şişirdiğimiz nesne sayısı konusunda daha dikkatli olmamız gerektiği anlamına geliyordu. Sonunda, bellek yükünü azaltmak ve performansı artırmak için tüm veri nesnelerimizi "talep üzerine şişirmeye" dönüştürdük.
EDIT: İşte "talep üzerine şişirmek" ne demek istediğimi daha ayrıntılı bir açıklama. Veritabanımızın nesne modelimizde, alt nesneleri açıklamak için bir üst nesnenin Özelliklerini kullanırız. Örneğin, birebir bazda başka bir "detay" veya "arama" kaydına referansta bulunan bazı kayıtlarımız olsaydı, bunu şu şekilde yapılandırabiliriz:
class ParentObject
Private mRelatedObject as New CRelatedObject
public Readonly property RelatedObject() as CRelatedObject
get
mRelatedObject.getWithID(RelatedObjectID)
return mRelatedObject
end get
end property
End class
Yukarıdaki sistemin, bellekte çok fazla kayıt olduğunda gerçek bellek ve performans sorunları yarattığını tespit ettik. Bu nedenle, nesnelerin yalnızca istendiğinde şişirildiği ve veritabanı çağrılarının yalnızca gerektiğinde yapıldığı bir sisteme geçtik:
class ParentObject
Private mRelatedObject as CRelatedObject
Public ReadOnly Property RelatedObject() as CRelatedObject
Get
If mRelatedObject is Nothing
mRelatedObject = New CRelatedObject
End If
If mRelatedObject.isEmptyObject
mRelatedObject.getWithID(RelatedObjectID)
End If
return mRelatedObject
end get
end Property
end class
Bu çok daha etkili olduğu ortaya çıktı çünkü nesneler ihtiyaç duyuluncaya kadar bellek dışında tutuldu (Get yöntemine erişildi). Veritabanı isabetlerini sınırlamada çok büyük bir performans artışı ve bellek alanında büyük bir kazanç sağladı.