प्राप्त करें-सामग्री और उपाय-वस्तु छोटे फ़ाइलों के लिए ठीक है, लेकिन दोनों स्मृति सुपर अक्षम हैं मैं बड़ी फ़ाइलों के साथ वास्तविक समस्या नहीं थी
है।। गिनती किसी भी विधि का उपयोग कर 1 जीबी फ़ाइल में पंक्तियां, पावरहेल ने सर्वर पर सभी उपलब्ध मेमोरी (8 जीबी) को गब्बल किया, फिर डिस्क पर पेजिंग शुरू कर दी। मैंने इसे एक घंटे से अधिक छोड़ा, लेकिन यह अभी भी डिस्क पर पेजिंग था इसलिए मैंने इसे मार दिया।
बड़ी फ़ाइलों के लिए मुझे मिली सबसे अच्छी विधि IO.StreamReader का उपयोग डिस्क से फ़ाइल लोड करने और चर के उपयोग से प्रत्येक पंक्ति को गिनने के लिए करना है। यह स्मृति उपयोग को बहुत ही उचित 25 एमबी तक रखता है और 1 जीबी फ़ाइल में पंक्तियों की गिनती करने के लिए लगभग 6 सेकंड या 6 जीबी फ़ाइल के लिए कुछ मिनट लगने के लिए लगभग 30 सेकंड लेता है। यह कभी नहीं रैम अनुचित मात्रा में, ऊपर खाती है चाहे कितना बड़ा अपने फ़ाइल है:
[int]$LinesInFile = 0
$reader = New-Object IO.StreamReader 'c:\filename.csv'
while($reader.ReadLine() -ne $null){ $LinesInFile++ }
भी आप, मिल-सामग्री या उपाय वस्तु का प्रयोग करेंगे बस के लिए $ LinesInFile चर का उल्लेख ऊपर टुकड़ा डाला जा सकता है फ़ाइल की पंक्ति गणना प्राप्त करें।
धन्यवाद, यह काम करने लगता है, लेकिन यह बहुत धीमी गति से उदा तुलना जीएनयू यूनिक्स utils wc.exe के लिए। – jrara
ऐसा इसलिए है क्योंकि wc.exe (गेट-कंटेंट) के बराबर होगा। तरंगदैर्ध्य जो आयात-सीएसवी की तुलना में बहुत तेज है, यह भी एक संभावित गलत समाधान है जैसा कि स्टीज द्वारा इंगित किया गया है क्योंकि यह पंक्तियों के लिए जिम्मेदार नहीं होगा मल्टीलाइन फ़ील्ड – EBGreen
ग्रेट सामान। मुझे जिस चीज की जरूरत थी... –