Альтернативний спосіб отримання вмісту файлу.
Зазвичай для отримання вмісту текстових файлів в PowerShell використовується командлет Get-Content. Наприклад для того, щоб вивести файл file.txt на екран, треба виконати таку команду:
Get-Content C: \ Files \ file.txt
це найбільш поширений, але не єдиний спосіб. Отримати вміст файлу можна, просто задавши в якості імені змінної шлях до файлу.Наприклад така команда видасть той же результат, що і попередня:
$ {C: \ Files \ file.txt}
Звичайно завжди корисно дізнатися щось нове, але привів я цей спосіб зовсім не для загального розвитку. Справа в тому, що при його використанні читання файлу здійснюється набагато швидше, при цьому споживаючи менше ресурсів.Для наочності проведемо невеличкий експеримент - візьмемо файл і вважаємо його в змінну двома різними способами, при цьому заміривши час роботи і споживання пам'яті. Для вимірювання часу виконання команди використовуємо командлет Measure-Command.
Спочатку заміряємо вихідні дані.Розмір файлу складає 65Мб, споживання пам'яті процесом PowerShell в просте близько 66 Мб.
Потім вважаємо вміст файлу в змінну за допомогою Get-Content і виміряємо час роботи командою:
Measure-Command -Expression {$ a = Get-Content "C: \ Files \ file.txt"}
Команда відпрацювала за 5,5 секунд, споживання пам'яті склало 1079784Кб (≈1Гб).
Тепер виконаємо читання файлу альтернативним способом, командою:
Measure- Command -Expression {$ a = $ {C: \ files \ file.txt}}
В цьому випадку для роботи команди треба було всього 0,3 секунди і 233508Кб (≈233,5Мб) пам'яті.
Як бачите, у другому випадку швидкість роботи на порядок вище, а споживання пам'яті на порядок нижче.І чим розмір файлу більше, тим помітніше буде різниця в продуктивності, так що для читання файлів великого розміру другий спосіб краще.
У даного способу є деякі особливості. По-перше, шлях до файлу не повинен бути в лапках, навіть при наявності в ньому прогалин.А також в шляху до файлу можна використовувати групові символи або змінні. Наприклад можна написати так:
$ {C: \ files \ *. Txt}
або так:
$ {% systemdrive% \ files \ file. txt}
Тобто. цей спосіб не дозволяє вважати відразу кілька файлів, на відміну від Get-Content.
.