Использование конвейера (потенциально) с эффективным использованием памяти , но медленно .
Для ускорения обработки:
избегать конвейера, но это только вариант, если ваши данные помещаются в память в целом - что не должно быть проблемой для файлов размером 20 МБ.
отдельно, используйте типы .NET Framework и их методы напрямую, что обычно быстрее, чем использование командлетов .
Применение этих идей к вашему сценарию (синтаксис PSv3 +):
[regex]::Matches(
[IO.File]::ReadAllText($PWD.ProviderPath + '/Test.log'),
'M\d{10}'
).Value | Select-Object -Unique
Обратите внимание, что для удобства по-прежнему используется конвейер с Select-Object -Unique
для получения уникальных вхождений, но предполагается, что основная часть обработки - извлечение совпадений регулярных выражений - находится в оптимизированной части оператора ,