Tôi đang làm việc với một số tệp văn bản nhiều gigabyte và muốn thực hiện một số xử lý luồng trên chúng bằng PowerShell. Đó là công cụ đơn giản, chỉ cần phân tích cú pháp từng dòng và rút ra một số dữ liệu, sau đó lưu trữ nó trong cơ sở dữ liệu.
Thật không may, get-content | %{ whatever($_) }
dường như giữ toàn bộ tập hợp các dòng ở giai đoạn này của đường ống trong bộ nhớ. Nó cũng chậm một cách đáng ngạc nhiên, mất rất nhiều thời gian để thực sự đọc hết.
Vì vậy, câu hỏi của tôi gồm hai phần:
- Làm cách nào để tôi có thể làm cho nó xử lý từng dòng một và không giữ toàn bộ nội dung được lưu vào bộ nhớ? Tôi muốn tránh sử dụng nhiều hợp đồng RAM cho mục đích này.
- Làm cách nào để làm cho nó chạy nhanh hơn? PowerShell lặp lại trên một
get-content
tập lệnh C # có vẻ chậm hơn 100 lần.
Tôi hy vọng có điều gì đó ngu ngốc mà tôi đang làm ở đây, chẳng hạn như thiếu một -LineBufferSize
tham số hoặc một cái gì đó ...
get-content
, hãy đặt -ReadCount thành 512. Lưu ý rằng tại thời điểm này, $ _ trong Foreach sẽ là một mảng các chuỗi.