Я працюю з декількома гігабайтними текстовими файлами і хочу виконати певну обробку потоків над ними за допомогою PowerShell. Це прості речі, просто проаналізуйте кожен рядок і витягніть деякі дані, а потім збережіть їх у базі даних.
На жаль, get-content | %{ whatever($_) }
схоже, він зберігає в пам'яті весь набір рядків на цьому етапі конвеєра. Це також напрочуд повільно, адже потрібно дуже багато часу, щоб насправді прочитати все.
Отже, моє запитання складається з двох частин:
- Як я можу змусити його обробляти потік за рядком і не зберігати все, що буферизується в пам'яті? Я хотів би уникати використання декількох концертів оперативної пам'яті для цієї мети.
- Як я можу змусити його працювати швидше? Ітерація PowerShell над,
get-content
здається, у 100 разів повільніша, ніж сценарію C #.
Я сподіваюся, що я роблю тут щось німе, наприклад, пропускаючи -LineBufferSize
параметр чи щось ...
get-content
встановіть -ReadCount на 512. Зверніть увагу, що на даний момент $ _ у Foreach буде масивом рядків.