เราได้ใช้ซอฟต์แวร์Ants Profiler Proโดย Red Gate ในโครงการของเรา มันทำงานได้ดีมากสำหรับแอปพลิเคชันที่ใช้ภาษา. NET ทั้งหมด
เราพบว่า. NET Garbage Collector นั้น "ปลอดภัย" อย่างมากในการล้างวัตถุในหน่วยความจำ (ตามที่ควรจะเป็น) มันจะเก็บวัตถุไว้รอบตัวเพราะเราอาจจะใช้มันในบางครั้งในอนาคต นี่หมายความว่าเราต้องระวังให้มากขึ้นเกี่ยวกับจำนวนของวัตถุที่เราขยายเกินความจำ ในท้ายที่สุดเราแปลงวัตถุข้อมูลทั้งหมดของเราให้เป็น "ขยายตามคำขอ" (ก่อนที่จะขอเขตข้อมูล) เพื่อลดค่าใช้จ่ายของหน่วยความจำและเพิ่มประสิทธิภาพ
แก้ไข: นี่คือคำอธิบายเพิ่มเติมของสิ่งที่ฉันหมายถึงโดย "ขยายความต้องการ" ในรูปแบบวัตถุของเราในฐานข้อมูลของเราเราใช้คุณสมบัติของวัตถุแม่เพื่อเปิดเผยวัตถุลูก (s) ตัวอย่างเช่นถ้าเรามีบันทึกที่อ้างอิง "รายละเอียด" หรือ "ค้นหา" บันทึกอื่น ๆ แบบหนึ่งต่อหนึ่งเราจะจัดโครงสร้างแบบนี้:
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
สิ่งนี้กลายเป็นมีประสิทธิภาพมากขึ้นเพราะวัตถุถูกเก็บไว้ในหน่วยความจำจนกว่าพวกเขาจะต้องการ (เข้าถึงวิธีการรับ) มันให้ประสิทธิภาพที่เพิ่มขึ้นอย่างมากในการ จำกัด การเข้าถึงฐานข้อมูลและเพิ่มพื้นที่หน่วยความจำได้อย่างมาก