ฉันกำลังทำงานกับไฟล์ข้อความหลายกิกะไบต์และต้องการประมวลผลสตรีมโดยใช้ PowerShell มันเป็นเรื่องง่ายๆเพียงแค่แยกวิเคราะห์แต่ละบรรทัดและดึงข้อมูลบางส่วนออกมาจากนั้นจัดเก็บไว้ในฐานข้อมูล
น่าเสียดายที่get-content | %{ whatever($_) }
ดูเหมือนว่าจะเก็บเส้นทั้งหมดไว้ที่ขั้นตอนนี้ของท่อในหน่วยความจำ นอกจากนี้ยังช้าอย่างน่าประหลาดใจใช้เวลานานมากในการอ่านทั้งหมด
ดังนั้นคำถามของฉันมีสองส่วน:
- ฉันจะทำให้มันประมวลผลสตรีมทีละบรรทัดและไม่เก็บข้อมูลทั้งหมดไว้ในหน่วยความจำได้อย่างไร ฉันต้องการหลีกเลี่ยงการใช้ RAM หลายกิ๊กเพื่อจุดประสงค์นี้
- ฉันจะทำให้มันทำงานเร็วขึ้นได้อย่างไร PowerShell วนซ้ำ
get-content
ดูเหมือนจะช้ากว่าสคริปต์ C # 100 เท่า
ฉันหวังว่าจะมีอะไรโง่ ๆ ที่ฉันทำที่นี่เช่นไม่มี-LineBufferSize
พารามิเตอร์หรืออะไรบางอย่าง ...
get-content
ให้ตั้งค่า -ReadCount เป็น 512 โปรดทราบว่า ณ จุดนี้ $ _ ใน Foreach จะเป็นอาร์เรย์ของสตริง