У нашому проекті ми використовували програмне забезпечення Ants Profiler Pro від Red Gate. Він працює дуже добре для всіх мовних програм .NET.
Ми з'ясували, що .NET Garbage Collector дуже "безпечний" при очищенні об'єктів пам'яті (як це має бути). Він би зберігав об'єкти навколо нас лише тому, що ми могли б використовувати його коли - небудь в майбутньому. Це означало, що нам потрібно бути більш уважними щодо кількості предметів, які ми надули в пам’яті. Врешті-решт, ми перетворили всі наші об’єкти даних на «завищення за потребою» (безпосередньо перед запитом поля), щоб зменшити накладні витрати та збільшити продуктивність.
EDIT: Ось подальше пояснення того, що я маю на увазі під "надуванням попиту". У нашій об'єктній моделі нашої бази даних ми використовуємо Властивості батьківського об'єкта для викриття дочірніх об'єктів. Наприклад, якби у нас був запис, який посилався на якийсь інший запис "деталей" або "пошуку", один на один, ми б структурували його так:
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
Ми виявили, що вищевказана система створила деякі реальні проблеми з пам'яттю та продуктивністю, коли в пам'яті було багато записів. Таким чином, ми перейшли до системи, де об'єкти надувались лише тоді, коли їх вимагали, а дзвінки до бази даних здійснювались лише за потреби:
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
Це виявилося набагато ефективнішим, оскільки об’єкти зберігалися в пам'яті, поки вони не знадобляться (доступний метод Get). Це забезпечило дуже високе підвищення продуктивності в обмеженні звернень до бази даних та величезний приріст простору пам’яті.