2012-09-05 11 views
5

मैं पावरहेल के लिए नया हूं लेकिन विंडोज 20033 सर्वर पर चल रही कुछ स्क्रिप्ट लिखी है। यह निश्चित रूप से cmd स्क्रिप्टिंग से अधिक शक्तिशाली है (शायद मुझे प्रोग्रामिंग पृष्ठभूमि होने के कारण)। हालांकि, जब मैंने आगे बढ़े, मैंने देखा कि:पावरहेल मेमोरी उपयोग - महंगा?

  1. प्रत्येक स्क्रिप्ट लॉन्च की गई 1 शक्तिशक्ति प्रक्रिया, यानी। आप प्रत्येक स्क्रिप्ट के लिए एक नई पावरहेल प्रक्रिया देखते हैं।
  2. स्क्रिप्ट्स जिन्हें मैंने स्मृति के लिए परीक्षण किया है, वास्तव में सरल हैं, कहें, स्ट्रिंग या पर्यावरण चर से पूछें, फिर 60 सेकंड के लिए स्टार्ट-स्लीप, तो कुछ भी ज़रूरत नहीं है (स्मृति उपयोग के रूप में)। लेकिन प्रत्येक प्रक्रिया लगभग 30 एमबी लेती है। मुझे कड़े कॉल करें, लेकिन मेमोरी-गहन एप्लिकेशन रोज़ाना चलाने के लिए निर्धारित हैं, और यदि मुझे नियमित रूप से चलाने के लिए कुछ पावरहेल स्क्रिप्ट को शेड्यूल करने की आवश्यकता है और शायद कुछ स्क्रिप्ट लगातार सेवा के रूप में चल रही है, तो मैं निश्चित रूप से रखने की कोशिश करता हूं स्मृति जितना संभव हो उतना खपत। < - ऐसा इसलिए है क्योंकि हमने हाल ही में स्मृति की कमी के कारण बड़ी एप्लिकेशन विफलता का अनुभव किया है।

मैंने अभी तक सी # पर स्पर्श नहीं किया है, लेकिन क्या कोई यह मान लेगा कि कभी-कभी कार्य को सी # में लिखना बेहतर हो सकता है?

इस बीच, मैंने पावरहेल में मेमोरी लीक के संबंध में पोस्ट देखी हैं। क्या मुझे यह सोचने का अधिकार है कि स्क्रिप्ट द्वारा बनाई गई स्मृति शक्तिशक्ति की प्रक्रिया स्थान के साथ होगी, ताकि जब स्क्रिप्ट समाप्त हो जाए तो शक्तियों को समाप्त कर दिया जाएगा, बनाई गई स्मृति को मंजूरी मिल जाएगी?

+0

यह पीएस गुरुओं की मदद करेगा यदि आप पुन: उत्पन्न करने योग्य मामलों, उदाहरण के लिए स्क्रिप्ट, इसे कैसे लॉन्च किया गया है, और कैसे आप स्मृति उपयोग को निर्धारित कर रहे हैं, शामिल करने के लिए अपना प्रश्न संपादित करते हैं। सौभाग्य। – shellter

उत्तर

4

मेरा PowerShell.exe 2.0 स्वयं (स्क्रिप्ट नहीं चला रहा) XP पर ~ 30MB है। इन दिनों प्रति मशीन औसत मेमोरी के साथ आपको चिंता नहीं करनी चाहिए। मेमोरी लीक के संबंध में, ऐसे मामले सामने आए हैं जहां लोग तीसरे पक्ष के पुस्तकालयों का उपयोग करते हैं जिनके पास मेमोरी लीक होती है जब ऑब्जेक्ट्स का सही ढंग से निपटान नहीं किया जाता है। उन लोगों को संबोधित करने के लिए आपको [gc]::Collect() पर कचरा कलेक्टर का मैन्युअल रूप से उपयोग करना होगा, लेकिन यह दुर्लभ है। दूसरी बार मैंने लोगों को Get-Content का उपयोग बहुत बड़ी फ़ाइल पढ़ने और इसे उपयोग करने से पहले एक चर को असाइन करने के लिए देखा है। इसमें बहुत सारी स्मृति भी होगी। उस स्थिति में आप अपनी मेमोरी पदचिह्न को कम करने के लिए फ़ाइल भागों को पढ़ने के लिए पाइपलाइन का उपयोग कर सकते हैं।

+1

जब आप काम स्ट्रीम कर सकते हैं तो PowerShell सबसे कुशलता से काम करता है यानी एक समय में एक आइटम पर काम करता है और बाद में उपयोग के लिए सभी आइटम्स को एक चर में स्टोर नहीं करता है (जैसा कि इस उत्तर में बताया गया है)। स्ट्रीमिंग परिदृश्यों में भी आपको कुछ cmdlets के लिए देखना होगा जो सॉर्ट-ऑब्जेक्ट, ग्रुप-ऑब्जेक्ट और फॉर्मेट-टेबल जैसे -AutoSize पैरामीटर निर्दिष्ट के साथ स्ट्रीम नहीं कर सकते हैं। –

+0

@ किथहिल एक अच्छा मुद्दा बनाता है, क्योंकि उनकी प्रकृति के कारण cmdlets के प्रकार का उल्लेख किया गया है कि इसे संसाधित करने से पहले पाइपलाइन से सभी डेटा प्राप्त करने की आवश्यकता है, भले ही 'गेट-कंटेंट' एक समय में फ़ाइल भागों को संसाधित करने में सक्षम था और पाइपलाइन के माध्यम से इसे स्ट्रीम करें, 'सॉर्ट-ऑब्जेक्ट' जैसे cmdlets को आने वाले सभी डेटा को बफर करने की आवश्यकता होगी जिसमें स्मृति त्रुटियों से बाहर निकलने की क्षमता है। –

5

1 - हां, एक नई प्रक्रिया बनाई गई है। एक cmd स्क्रिप्ट, vb स्क्रिप्ट, या सी # संकलित निष्पादन योग्य चलते समय भी यही सच है।

2 - पावरहेल होस्ट और रनटाइम लोड करने से स्मृति की कुछ गैर-छोटी मात्रा ले जाएगी, जो सिस्टम से सिस्टम और संस्करण से संस्करण में भिन्न हो जाएगी। यह आमतौर पर एक cmd खोल या एक समर्पित सी # exe की तुलना में एक भारी वजन प्रक्रिया होगी। उन एमबी के लिए, आपको समृद्ध रनटाइम और लाइब्रेरी समर्थन मिल रहा है जो पावरहेल को इतना शक्तिशाली बनाता है।

जनरल टिप्पणियाँ:

  • ओएस प्रति प्रक्रिया स्मृति आवंटित करता है। एक बार प्रक्रिया समाप्त हो जाने के बाद, इसकी सभी मेमोरी पुनः प्राप्त की जाती है। यह किसी भी आधुनिक ओएस का सामान्य डिजाइन है, और यह पावरहेल या यहां तक ​​कि विंडोज के लिए विशिष्ट नहीं है।
  • यदि आपकी टीम हार्डवेयर पर व्यवसाय-महत्वपूर्ण अनुप्रयोग चला रही है, तो कुछ हद तक 30 एमबी प्रक्रियाएं आपदाजनक विफलता का कारण बन सकती हैं, आपको बड़ी समस्याएं हैं। एक ब्राउज़र खोलना और फेसबुक पर जाकर उससे अधिक स्मृति खाएगी।
  • उस समय में आपको कुछ आर्केन बैच स्क्रिप्ट समाधान का पता लगाने में मदद मिलती है, तो संभवतः आप पावरहेल में बेहतर समाधान बना सकते हैं, और आपकी कंपनी बिलकुल घंटों में बचत के साथ नए समर्पित हार्डवेयर का खर्च ले सकती है :-)
  • आपको चाहिए उस उपकरण का उपयोग करें जो नौकरी के लिए सबसे उपयुक्त है। पावरहेल अक्सर सही उपकरण है, लेकिन हमेशा नहीं। विंडोज वातावरण में प्रशासनिक कार्यों को स्वचालित करने के लिए यह बहुत अच्छा है (फ़ाइल प्रोसेसिंग, एडी के साथ काम करना, निर्धारित कार्य, सेटिंग अनुमतियां इत्यादि)। उच्च प्रदर्शन, भारी एल्गोरिदमिक कार्यों, या कच्चे .NET API के विरुद्ध जटिल कोडिंग के लिए यह बहुत अच्छा है। इन कार्यों के लिए, सी # अधिक समझ में आता है।
  • पावरहेल के पास माइक्रोसॉफ्ट (और एक बड़ा उपयोगकर्ता समुदाय!) से भारी समर्थन/समर्थन है, और यह बहुत स्पष्ट हो गया है कि विंडोज़ आगे बढ़ने के लिए यह पसंदीदा स्क्रिप्टिंग वातावरण है। विंडोज के लिए सभी नए सर्वर-साइड तकनीक में शक्तियों का समर्थन है। यदि आप व्यवस्थापक/आईटी में काम कर रहे हैं, तो यह पावरहेल में कुछ कौशल बनाने के लिए एक बुद्धिमान निवेश होगा। मैं किसी को सी # सीखने से कभी हतोत्साहित नहीं करता, लेकिन यदि आपकी भूमिका देव की तुलना में अधिक आईटी है तो पावरहेल अधिक बार सही उपकरण होगा, और आपके सहयोगियों को यह भी समझने की अधिक संभावना है।
+0

ग्रेट पॉइंटर्स! –