आईसीएलएएसफ़ैक्टरी :: लॉकसेवर क्यों मौजूद है जब मुझे लगता है कि आईसीएलएएसफ़ैक्टरी :: AddRef/IClassFactory :: रिलीज एक ही लक्ष्य पूरा कर सकता है?आईसीएलएएसफ़ैक्टरी :: लॉकसेवर का क्या मतलब है?
उत्तर
यह डॉन बॉक्स की पुस्तक Essential COM में विस्तार से समझाया गया है।
AddRef/Release
कक्षा वस्तुओं के आईसीएलएएस फैक्ट्री इंटरफेस पर अक्सर प्रक्रियाओं के बाहर सर्वरों में खाली विधियां होती हैं। ऐसा इसलिए है क्योंकि क्लास ऑब्जेक्ट का आंतरिक संदर्भ सर्वर द्वारा बनाए रखा जाता है जब यह CoRegisterClassObject
पर कॉल करता है, और इस प्रकार AddRef/Release
के "सामान्य" इन-प्रोसेस सर्वर कार्यान्वयन के परिणामस्वरूप वर्ग ऑब्जेक्ट पर संदर्भ गणना हमेशा एक से अधिक हो जाती है, और सर्वर CoRevokeClassObject
पर कॉल करने के बारे में नहीं पता होगा।
COM रनटाइम IClassFactory::LockServer
पर कॉल करता है जब यह CoGetClassObject
पर कॉल के बाद क्लास ऑब्जेक्ट के बाहरी संदर्भ को मार्शल करता है। इस तरह सर्वर प्रक्रिया जीवनकाल को बाहरी संदर्भों के अस्तित्व या अन्यथा के आधार पर ठीक से नियंत्रित किया जा सकता है।
मुझे यकीन नहीं है, लेकिन मुझे लगता है कि विचार यह है कि आप क्लास फैक्ट्री प्राप्त करने के लिए CoGetClassObject को कॉल कर सकते हैं, इसे अपने आईसीएलएएसफ़ैक्टरी इंटरफ़ेस के माध्यम से लॉक कर सकते हैं और फिर इंटरफ़ेस को छोड़ सकते हैं। बाद में जब आप एक ही कक्षा के लिए CoGetClassFactory को दोबारा कॉल करते हैं, क्योंकि इसे स्मृति में बंद कर दिया गया है, तो सिस्टम एक नया निर्माण करने के बजाए एक ही फैक्ट्री ऑब्जेक्ट को वापस कर देगा। इससे प्रदर्शन में सुधार हो सकता है जहां आप उस वर्ग की एक बड़ी वस्तुएं बनाते हैं।
हां, आप आईसीएलएएसफ़ैक्टरी इंटरफ़ेस पॉइंटर पर होकर एक ही चीज़ प्राप्त कर सकते हैं। लेकिन जब आपका ऐप शुरू होता है तो कारखाने के ऑब्जेक्ट को लॉक करके और इसे शटडाउन पर अनलॉक करके, आपको कहीं भी इंटरफ़ेस पॉइंटर (ग्लोबल वैरिएबल या जो कुछ भी हो) में नहीं रखना पड़ता है।
मुझे संदेह है कि उन्होंने आईसीएलएएसफ़ैक्टरी को पेश किया है: : लॉकसेवर यह था कि सर्वर को लॉक करना अर्थपूर्ण रूप से addRef'ing जैसा ही नहीं है। AddRef/रिलीज सामान्य ऑब्जेक्ट लाइफसाइक्ल प्रबंधन के लिए है और स्पष्ट रूप से परिभाषित अर्थशास्त्र परिभाषित किया गया है। सर्वर लॉक करना एक प्रदर्शन ट्विक है।
- 1. os.error का क्या मतलब है?
- 2. FILL_AND_STROKE का क्या मतलब है?
- 3. संयोजन का मतलब क्या है?
- 4. दस्तावेज़ का क्या मतलब है?
- 5. क्या() => {} का मतलब है?
- 6. @plt का मतलब क्या है?
- 7. MethodImplOptions.InternalCall का क्या मतलब है?
- 8. 'अल्फकी' का क्या मतलब है?
- 9. आवश्यकता का मतलब क्या है?
- 10. एक्सपीएस का क्या मतलब है?
- 11. iter_swap का क्या मतलब है?
- 12. क्या है = = मतलब?
- 13. निर्धारक मतलब क्या है?
- 14. अपरिवर्तनीय मतलब क्या है?
- 15. जावास्क्रिप्ट:/* @ @ */मतलब क्या है?
- 16. जावास्क्रिप्ट: RegExp.compile() का क्या मतलब है?
- 17. nginx में अपस्ट्रीम का मतलब क्या है?
- 18. बटन _armed_ का क्या मतलब है?
- 19. बाध्यकारी का मतलब वास्तव में क्या है?
- 20. एक Django "ऐप" का मतलब क्या है?
- 21. जावास्क्रिप्ट में @const का मतलब क्या है?
- 22. पैकेज एनोटेशन का क्या मतलब है?
- 23. मैक्रोज़ में tilde (~) का मतलब क्या है?
- 24. hibernate.jdbc.batch_size निर्दिष्ट करने का क्या मतलब है?
- 25. फोरट्रान में "%" का मतलब क्या है?
- 26. कैश कोहेरेंसी का क्या मतलब है?
- 27. बाजार में टैग का क्या मतलब है?
- 28. खोल में $$ का मतलब क्या है?
- 29. एलआईए ईएक्स, [ईएक्स] का क्या मतलब है?
- 30. डब्लूसीएफ में डब्ल्यूएस का मतलब क्या है?
उस पुस्तक में इसे देखने का अच्छा विचार ... मैंने ऐसा क्यों नहीं सोचा! –