2011-09-03 21 views
9

GC.KeepAlive() का उपयोग कैसे करें और किस उद्देश्य के लिए?GC.KeepAlive() का उपयोग कैसे करें और किस उद्देश्य के लिए

मैं सॉकेट का उपयोग कर टर्मिनल (विंडोज-सीई) से सर्वर में फ़ाइल स्थानांतरित करता हूं।

स्थानांतरण करने की आवश्यकता 8 मिनट है।

5 मिनट विंडोज सीई बन्द करते हैं (यदि टच स्क्रीन दबाया नहीं)

अगर मैं इस बात के लिए GC.KeepAlive() उपयोग करने के बाद, यह मेरी समस्या का समाधान है? अग्रिम

+0

क्या आपने उस API का उपयोग करने का प्रयास किया था? एमएसडीएन के अनुसार, यह सच लगता है या काम कर सकता है क्योंकि WinCE अप्रबंधित कोड – Zenwalker

उत्तर

4

में

धन्यवाद नेट के लिए MSDN लाइब्रेरी से:

KeepAlive विधि के प्रयोजन के किसी ऑब्जेक्ट को संदर्भ समय से पहले होने का खतरा होता है कि के अस्तित्व को सुनिश्चित करना है कचरा कलेक्टर द्वारा पुनः प्राप्त किया गया। एक सामान्य परिदृश्य जहां यह हो सकता है है जब प्रबंधित कोड या डेटा, में ऑब्जेक्ट का कोई संदर्भ नहीं है, लेकिन ऑब्जेक्ट अभी भी अप्रबंधित कोड जैसे Win32 APIs, अप्रबंधित DLLs, या COM का उपयोग करने वाले विधियों में उपयोग में है।

तो यह आपकी समस्या का समाधान नहीं करेगा। वास्तव में यह आपकी समस्या से भी संबंधित नहीं है। केवल एक चीज आप कर सकते सेवा/आवेदन पर Windows CE चलाने में है, कोड कि जब तक स्थानांतरण कार्य प्रगति पर है के रूप में

+0

पर है विंस स्टफ अप्रबंधित वस्तुएं हैं? तो एमएसडीएन के अनुसार, यह सही अधिकार है? – Zenwalker

+1

सिर्फ इसलिए कि आप विंडोज सीई पर चल रहे हैं इसका मतलब यह नहीं है कि यह अप्रबंधित है, क्योंकि सीई विशिष्ट उपकरणों –

+0

के लिए उपलब्ध एक संपूर्ण .NET प्लेटफार्म है, यदि यह माना जाता है कि यह अनजान पर विंस है। तब keepalive wud सहायक हो? – Zenwalker

11

आप बहुत मुश्किल से ही GC.KeepAlive उपयोग करने की आवश्यकता बंद करने के लिए प्रणाली को रोकता जोड़ने - बहुत शायद ही कभी। यदि आप फाइनलर के साइड इफेक्ट को बहुत जल्दी होने से रोकना चाहते हैं, तो आप इसका इस्तेमाल करेंगे, उदाहरण के लिए। मैंने अक्सर इसे Mutex के लिए उपयोग किया है - एक ऐप के अंत तक म्यूटेक्स को जीवित रखते हुए यह सुनिश्चित करने के लिए कि केवल एक ही उदाहरण है। (ए using कथन वास्तव में यहां बेहतर है, लेकिन यह एक अलग मामला है।)

और नहीं, ऐसा लगता है कि यह आपकी स्थिति में प्रासंगिक नहीं है।

+1

एमएसडीएन के अनुसार, विंस अप्रबंधित वस्तुओं पर हैं। तो यह दृढ़ता से बनाने के लिए कि एमएसडीएन क्या कहता है सही है? – Zenwalker

+1

@zenwalker: सीई दोनों प्रबंधित और देशी कोड का समर्थन करता है, हालांकि न तो समस्या के लिए न तो प्रासंगिक है। – ctacke

+0

COM वस्तुओं के बारे में क्या? – codea

0

स्क्रीन पर बिजली की शक्ति डिवाइस पर एक पावर-प्रबंधन सेटिंग है। ऐसा होने जा रहा है कि कोई ऐप चल रहा है या नहीं। जीसी के पास ऐसा करने के लिए बिल्कुल कुछ नहीं है।

यदि आप पावर मैनेजर को एचटी डिवाइस को कम-शक्ति स्थिति में रखने से रोकना चाहते हैं, तो आपके पास कुछ विकल्प हैं। आप समय-समय पर अपने ऐप में SystemIdleTimerReset पर कॉल कर सकते हैं।

आप SetSystemPowerState के साथ बिजली की स्थिति को मजबूर कर सकते हैं।

आप [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Power\Timeouts] पर अपनी पसंद के कुछ और सेटिंग एडजस्ट करने के द्वारा (एक WM_SETTINGS_CHANGE प्रसारण IIRC के बाद) के लिए बिजली प्रबंधक समय समाप्ति बदल सकता है।

सबसे अच्छा "समाधान" आपकी ऐप आवश्यकताओं, आपके उपयोगकर्ताओं की आवश्यकताओं और लक्ष्य डिवाइस की पावर प्रबंधन प्रणाली पर निर्भर करेगा।