2012-12-11 13 views
8

मेरे पास आईआईएस में होस्ट किया गया डब्ल्यूसीएफ एप्लीकेशन है (C#/.Net 4 में लिखा गया है)। समय के साथ, प्रक्रिया की हैंडल गिनती कम या ज्यादा रैखिक फैशन में बढ़ जाती है (प्रक्रिया रीसायकल से पहले 30,000 के रूप में उच्च हो रही है)। SysInternals प्रक्रिया एक्सप्लोरर के मुताबिक, इस प्रक्रिया में हैंडल का बड़ा हिस्सा Thread है। हालांकि, प्रदर्शन मॉनिटर के अनुसार, धागे की संख्या कम या ज्यादा स्थिर (लगभग 40) शेष है।"लीकिंग" थ्रेड हैंडल

स्पष्ट रूप से, मैं कुछ गलत कर रहा हूं और Thread Handles लीक कर रहा हूं। हालांकि, मैं अस्पष्ट हूं कि इस संदर्भ में Thread Handle क्या है। मुझे लगता है कि यह धागे के लिए एक हैंडल है, लेकिन चूंकि धागे की संख्या लगातार बनी हुई है, इसलिए मुझे नहीं लगता कि हैंडल गिनती कैसे बढ़ रही है। और, मैं थ्रेड को हैंडल रखने के किसी भी तरीके से नहीं सोच सकता, जबकि थ्रेड स्वयं चला जाता है। इसके अलावा, मैं स्पष्ट रूप से नए धागे नहीं बना रहा हूं (मैं स्थानों पर ThreadPool का उपयोग कर रहा हूं)।

स्पष्ट रूप से, मुझे कुछ याद आ रहा है। पर क्या?

+0

क्या आपके पास सिंगल इंस्टेंस, पर्कॉल या सत्र के रूप में डब्ल्यूसीएफ सेवा है? क्या आप वहां एक आईओसी कंटेनर का उपयोग कर रहे हैं? – Jordi

+0

क्या आप अपने आप से धागे का प्रबंधन कर रहे हैं या आप थ्रेड पूल का उपयोग कर रहे हैं? आपके आवेदन का किस प्रकार के धागे उपयोग करते हैं (क्या हम आईआईएस द्वारा किए गए धागे के बारे में बात कर रहे हैं -> आईआईएस द्वारा सीमित, या अपने स्वयं के धागे)? – Rafa

+0

डब्ल्यूसीएफ सेवा एकल उदाहरण और एकाधिक समरूपता है। कोई आईओसी कंटेनर नहीं। –

उत्तर

0

According documentation:

जब एक नया धागा CreateThread या CreateRemoteThread समारोह द्वारा बनाई गई है, थ्रेड में कोई संभाल दिया जाता है।

तो यदि आपके पास बहुत अधिक हैंडल हैं, तो आपका एप्लिकेशन लगातार नए थ्रेड का उत्पादन करता है। दूसरी तरफ, प्रदर्शन मॉनीटर में थ्रेड की निरंतर संख्या के पास कहता है कि पुनर्नवीनीकरण वाले स्थान पर थ्रेड बनाए जाते हैं।

ThreadPool वर्ग प्रलेखन:

.NET फ्रेमवर्क 4, थ्रेड पूल बनाता है और क्रम में कार्यकर्ता धागे को नष्ट कर देता throughput अनुकूलन करने के लिए है, जो कि प्रति यूनिट पूरा कार्यों की संख्या के रूप में परिभाषित किया गया है के साथ शुरू समय की। बहुत कम धागे उपलब्ध संसाधनों का इष्टतम उपयोग नहीं कर सकते हैं, जबकि बहुत से धागे संसाधन विवाद को बढ़ा सकते हैं।

तो मुझे लगता है कि आपका एप्लिकेशन व्यवहार ThreadPool की वजह से है।

+0

@ ब्रायन रasmुसेन धन्यवाद – VMAtm

1

कोई थ्रेड समाप्त करने के लिए संभाल सकता है। तो धागे बन जाते हैं, समाप्त हो जाते हैं, लेकिन हैंडल बनी हुई है।

प्रारंभ प्रक्रिया मॉनिटर (procmon.exe) प्रारंभ करें और इसे "प्रक्रिया और थ्रेड गतिविधि" (फाइलें, रजिस्ट्री और नेटवर्क अक्षम करें) को सुनने के लिए सेट करें। निर्धारित करें, धागे को डबल-क्लिक करके थ्रेड बनाकर ईवेंट बनाते हैं और स्टैक को देखते हैं।

उस धागे को बनाने वाले प्रश्न का उत्तर देना चाहिए। वह हैंडल बंद करने के लिए जिम्मेदार है।

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