हमने अपनी परियोजना में रेड गेट सॉफ्टवेयर द्वारा चींटियों के प्रो प्रो का उपयोग किया है । यह सभी .NET भाषा-आधारित अनुप्रयोगों के लिए वास्तव में अच्छी तरह से काम करता है।
हमने पाया कि .NET गारबेज कलेक्टर इन-मेमोरी ऑब्जेक्ट्स (जैसा होना चाहिए) की सफाई में बहुत "सुरक्षित" है। यह वस्तुओं को केवल इसलिए इधर-उधर रखेगा क्योंकि हम भविष्य में कभी-कभी इसका उपयोग कर सकते हैं। इसका मतलब है कि हमें उन वस्तुओं की संख्या के बारे में अधिक सावधानी बरतने की जरूरत है जिन्हें हमने स्मृति में फुलाया है। अंत में, हमने मेमोरी ओवरहेड को कम करने और प्रदर्शन को बढ़ाने के लिए अपनी सभी डेटा ऑब्जेक्ट्स को एक "इन-ऑन-ऑन-डिमांड" (एक क्षेत्र से पहले अनुरोध किया जाता है) में बदल दिया।
संपादित करें: यहाँ मेरा मतलब है "मांग पर भड़कना" का एक और स्पष्टीकरण है। हमारे डेटाबेस के ऑब्जेक्ट मॉडल में हम चाइल्ड ऑब्जेक्ट (एस) को उजागर करने के लिए एक मूल वस्तु के गुणों का उपयोग करते हैं। उदाहरण के लिए यदि हमारे पास कुछ रिकॉर्ड था जो एक-एक के आधार पर कुछ अन्य "विवरण" या "लुकअप" रिकॉर्ड को संदर्भित करता है तो हम इसे इस तरह से संरचित करेंगे:
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
यह बहुत अधिक कुशल निकला क्योंकि वस्तुओं को तब तक मेमोरी से बाहर रखा जाता था जब तक उन्हें जरूरत नहीं होती (गेट विधि एक्सेस की जाती थी)। इसने डेटाबेस हिट्स को सीमित करने और मेमोरी स्पेस पर एक बहुत बड़ा प्रदर्शन प्रदान किया।