プロジェクトでは、Red GateソフトウェアのAnts Profiler Proを使用しました。すべての.NET言語ベースのアプリケーションで非常にうまく機能します。
.NETガベージコレクターは、メモリ内オブジェクトのクリーンアップにおいて(本来のとおり)非常に「安全」であることがわかりました。なぜなら、私たちが将来いつか使用するがある。これは、メモリ内で膨らんだオブジェクトの数についてより注意する必要があることを意味しました。最後に、メモリオーバーヘッドを減らしてパフォーマンスを向上させるために、すべてのデータオブジェクトを「フィールドを要求する直前に」オンデマンドで変換しました。
編集:ここでは、「オンデマンドでの膨張」の意味について詳しく説明します。データベースのオブジェクトモデルでは、親オブジェクトのプロパティを使用して子オブジェクトを公開します。たとえば、他の「詳細」または「ルックアップ」レコードを1対1で参照するレコードがある場合、次のように構成します。
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メソッドにアクセスするまで)オブジェクトのメモリから解放されるため、はるかに効率的であることがわかりました。これにより、データベースヒットを制限する際のパフォーマンスが大幅に向上し、メモリ領域が大幅に増加しました。