В нашем проекте мы использовали программное обеспечение Ants Profiler Pro от Red Gate. Это работает очень хорошо для всех приложений на основе языка .NET.
Мы обнаружили, что .NET Garbage Collector очень «безопасен» для очистки объектов в памяти (как и должно быть). Это будет держать объекты вокруг только потому, что мы могли бы использовать его когда-нибудь в будущем. Это означало, что нам нужно быть более осторожным с количеством объектов, которые мы надували в памяти. В конце мы преобразовали все наши объекты данных в «раздувание по требованию» (непосредственно перед тем, как запрашивается поле), чтобы уменьшить нагрузку на память и повысить производительность.
РЕДАКТИРОВАТЬ: Вот еще одно объяснение того, что я имею в виду под «надувать по требованию». В нашей объектной модели нашей базы данных мы используем Свойства родительского объекта, чтобы представить дочерний объект (ы). Например, если бы у нас была какая-то запись, которая ссылалась на какую-то другую запись «detail» или «lookup» на индивидуальной основе, мы бы структурировали ее так:
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). Это обеспечило очень большое повышение производительности в ограничении обращений к базе данных и огромный выигрыш в объеме памяти.