2011-03-07 17 views
10

से 10x धीमी गति से चल रही है मेरे पास एक सी # लाइब्रेरी है जो कुछ फ़ाइल प्रोसेसिंग करता है। मैंने एक कंसोल और डेस्कटॉप एप्लिकेशन बनाया जो पुस्तकालय का उपयोग करता है और लगभग 1min में 256 एमबी फ़ाइल को संसाधित करता है। मैंने फिर एक विंडोज सेवा में होस्ट की गई डब्ल्यूसीएफ सेवा बनाई जो एक ही फाइल प्रोसेसिंग लाइब्रेरी का उपयोग करता है, फिर भी वेबसाइट से बुलाए जाने पर उसी 256 एमबी फ़ाइल को संसाधित करने के लिए 10x लंबा लगता है। विंडोज सेवा प्रशासक विशेषाधिकारों के साथ एक डोमेन खाते के तहत चल रही है।विंडोज सेवा में होस्ट की गई डब्ल्यूसीएफ सेवा कंसोल ऐप

डब्ल्यूसीएफ सेवा को कॉल करने में ओवरहेड बहुत तेज़ है, फिर भी लोडफाइल विधि बहुत अधिक समय लेती है। मैंने

Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High; 

के माध्यम से स्टार्टअप के दौरान प्रक्रिया प्राथमिकता बढ़ाने की कोशिश की। मैंने इस सेवा को Win7 64bit डेस्कटॉप सिस्टम (6 जीबी), 2003 एक्सपी 32 बिट सर्वर (4 जीबी) और 2008 आर 2 32 बिट सर्वर (4 बीजी) पर समान परिणामों के साथ चलाया है। कंसोल और डेस्कटॉप ऐप्स प्रत्येक फ़ाइल को उपरोक्त सिस्टम पर लगभग 1min में संसाधित करते हैं। प्रक्रिया स्मृति को बाधित नहीं करती है और स्वैपविले में प्रवेश नहीं करती है।

क्या विंडोज़ सेवाएं किसी भी तरह की प्रक्रिया को बाधित करती हैं? क्या मुझे आईआईएस के तहत डब्ल्यूसीएफ सेवा चलाने के बेहतर परिणाम मिलेंगे?

संपादित करें: मैंने वेबसाइट से लाइब्रेरी निर्देशिका को कॉल करने का प्रयास किया और यह भी कंसोल या डेस्कटॉप एप्लिकेशन से 10x लंबा लेता है।

अद्यतन: यह लॉग आउट करता है कि यह Log4PostSharp था। कॉन्फ़िगरेशन फ़ाइलों में कंसोल और डेस्कटॉप ऐप्स में log4net का कोई निशान नहीं था, फिर भी वेबसाइट और विंडोज़ सेवा ने किया था। एक log4net TraceAppender चुपचाप बहुमूल्य CPU चक्र खा रहा था।

+2

कैसे आप फ़ाइल वास्तव में लोड कर रहे हैं ऐसा करने के लिए, अपने app.config फ़ाइल में निम्न डाल? क्या आपने प्रोफाइलर के साथ प्रयास किया है कि वास्तव में बाधा कहां है (वीएस 2010 अल्टीमेट में एक प्रोफाइलर है) –

+6

यदि आप पहले से ऐसा नहीं कर चुके हैं तो मैं प्रक्रिया प्राथमिकता वर्ग को सामान्य में बहाल करने की अनुशंसा करता हूं। प्रक्रिया प्राथमिकता को संशोधित करना आम तौर पर एक प्रोग्राम को गति नहीं देगा, और यह संभावित रूप से अन्य समस्याएं पैदा कर सकता है। –

+0

@ डेवाइड: प्रोफाइलर प्रीमियम में भी है। +1; जाने का यह रास्ता है। –

उत्तर

4

मुझे नहीं लगता कि आपके द्वारा वर्णित व्यवहार क्यों हो रहा है - यह बहुत अजीब लगता है। चूंकि आप स्मृति में अपेक्षाकृत बड़ी फ़ाइल को संसाधित कर रहे हैं, कचरा कलेक्टर इसे प्रभावित कर सकता है। आप मोड को बदलने का प्रयास कर सकते हैं कचरा कलेक्टर यह देखने के लिए चलाता है कि इसका कोई प्रभाव है या नहीं।

कचरा कलेक्टर के तीन तरीके हैं - वर्कस्टेशन, सर्वर और समवर्ती। प्रत्येक एक अलग तरीके से व्यवहार करता है और विभिन्न प्रकार के अनुप्रयोगों के लिए अनुकूलित किया जाता है। वर्कस्टेशन मोड डिफ़ॉल्ट मोड है, और यह तब तक चल रहा है जब तक कि कुछ अन्य प्रक्रियाओं का उपयोग करने के लिए कॉन्फ़िगर नहीं किया जाता है। मोड के बारे में अधिक जानकारी here मिल सकती है।

सर्वर मोड का उपयोग करने के लिए कचरा कलेक्टर को स्पष्ट रूप से सेट करने का प्रयास करें (हालांकि यह केवल बहु-प्रोसेसर मशीन पर प्रभाव डालेगा)।

<configuration> 
    <runtime> 
     <gcServer enabled="true" /> 
    </runtime> 
</configuration> 
+0

अब तक इस बदलाव के साथ कोई भाग्य नहीं है –

+2

मैं आपको कम नहीं करूँगा लेकिन जीसी के कारण 10 एक्स मंदी दूर-दूर लगती है। पहले जांच करने के लिए अन्य क्षेत्र हैं, विशेष रूप से ओपी से हमारे पास बहुत कम जानकारी है। –

+0

@ जोहान: कचरा कलेक्टर के कारण कचरा कलेक्टर के कारण मुझे बड़ी धीमी गति से अनुभव हुआ है - कड़ी मेहनत करने वाले चल रहे एप्लिकेशन पर जीसी के प्रदर्शन काउंटर में '% समय पर नज़र डालें। – adrianbanks

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