2009-01-09 10 views
10

क्या कचरा कलेक्टर वेब सेवा संदर्भों को साफ़ करता है या क्या मुझे कॉल करने के बाद सेवा संदर्भ पर निपटान करने की आवश्यकता है, जिसे मैं कॉल करता हूं?क्या मुझे ASP.NET में वेब सेवा संदर्भ का निपटान करने की आवश्यकता है?

उत्तर

23

अपने वेब सेवाओं के निपटान के बारे में चिंता करने के बजाय, आप केवल प्रत्येक वेब सेवा का एक उदाहरण रख सकता है, एक singleton pattern का उपयोग कर। वेब सेवाएं स्टेटलेस हैं, इसलिए वे वेब सर्वर पर कनेक्शन और थ्रेड के बीच सुरक्षित रूप से साझा की जा सकती हैं।

यहाँ एक वेब सेवा वर्ग आप अपने वेब सेवा उदाहरणों के लिए संदर्भ धारण करने के लिए उपयोग कर सकते हैं का एक उदाहरण है। यह सिंगलटन आलसी और थ्रेड-सुरक्षित है। यह सलाह दी जाती है कि यदि आप अपने सिंगलेट्स को आलसी बनाते हैं, तो उन्हें एक ही तर्क का पालन करके थ्रेड सुरक्षित रखा जाता है। इसे कैसे करें के बारे में अधिक जानने के लिए, Implementing Singletons पर सी # गहराई लेख पढ़ें।

भी ध्यान रखें कि आप WCF वेब सेवाओं में समस्याएं आती हैं सकती हैं। मैं अधिक जानकारी के लिए WCF's instance management techniques article, विशेष रूप से सिंगलटन अनुभाग पर पढ़ने की अनुशंसा करता हूं।

public static class WS 
{ 
    private static object sync = new object(); 
    private static MyWebService _MyWebServiceInstance; 

    public static MyWebService MyWebServiceInstance 
    { 
     get 
     { 
      lock (sync) 
      { 
       if (_MyWebServiceInstance == null) 
       { 
        _MyWebServiceInstance= new MyWebService(); 
       } 
      } 
      return _MyWebServiceInstance; 
     } 
    } 
} 

और फिर जब आप अपने वेब सेवा का उपयोग करने की जरूरत है, तो आप ऐसा कर सकते हैं:

WS.MyWebServiceInstance.MyMethod(...) 

या

var ws = WS.MyWebServiceInstance; 
ws.MyMethod(...) 

मैं सफलतापूर्वक कई परियोजनाओं और उस पर इस पद्धति का उपयोग किया है अच्छी तरह से काम किया है, लेकिन जैसा कि tvanfosson नीचे दी गई टिप्पणियों में उल्लेख करता है, आपके वेब सेवा उदाहरणों को प्रबंधित करने के लिए एक डीआई फ्रेमवर्क का उपयोग करने के लिए एक बेहतर रणनीति होगी।

+0

धन्यवाद! मैं निश्चित रूप से अब उपयोग कर लागू करूँगा। – BeaverProj

+0

@ डैनहर्टबर्ट, हमारे पास आपके प्रश्न पर सार्वजनिक रूप से उपलब्ध संशोधन पर संशोधन है .. इसलिए आपको अपनी पोस्ट को क्रॉस आउट स्टोन के साथ अव्यवस्थित करने की आवश्यकता नहीं है। यह – mmcdole

+0

विचलित कर रहा है क्या आप हमें इस पर एक संपूर्ण पुस्तक लिख सकते हैं? आपका लगभग ... – Jobo

1

मुझे लगता है कि डेटा सेवा प्राप्तकर्ता घटक से निपटान करता है।

0

आप यहां क्या करने की कोशिश कर रहे हैं?

यदि आप प्रदर्शन के बारे में चिंतित हैं, तो मैं webservice और नेटवर्क की गति को होस्ट करने वाले सर्वर की प्रतिक्रिया के बारे में अधिक चिंता करता हूं, क्योंकि वे वेब सेवा कॉल को पूरा करने के लिए प्रतीक्षा करने के लिए समय की नाटकीय रूप से प्रभावित कर सकते हैं (जब तक इसके असीमित)।

एमएसडीएन पर उदाहरण 'निपटान' नहीं करते हैं और यह स्पष्ट है कि कचरा कलेक्टर अपना काम करेगा, इसलिए जब तक कि आप एक रीयलटाइम सिस्टम पर काम नहीं करते हैं, जिसे हर सेकेंड में 100,000 से अधिक रिकॉर्ड संसाधित करने की आवश्यकता होती है, तो हो सकता है कि आप न हों संसाधनों का निपटान करने या स्मृति का प्रबंधन करने के लिए एक तरीके से आने की जरूरत है।

+0

मेरा प्रश्न एक * से * था * आप इसे स्टैंडपॉइंट कर सकते हैं जैसा कि आपको इसे करने के लिए किया गया है। मेरी मुख्य चिंता मेमोरी लीक है जो धीरे-धीरे समय के साथ प्रदर्शन को कम कर देगी। – BeaverProj

1

वस्तुओं कि IDispose लागू कचरा कलेक्टर की सहायता के लिए मैन्युअल रूप से निपटाया जाना चाहिए।

आप आपत्ति कम रहता उपयोग एक using ब्लॉक है। उन वस्तुओं के लिए जिन्हें बनाए रखा जा सकता है, यह सुनिश्चित करता है कि वे ऑब्जेक्ट करते हैं जो उन्हें डिस्पोजेड करते समय उनका निपटान बनाए रखता है।

संबंधित मुद्दे

 संबंधित मुद्दे