Я пытаюсь загрузить файл размером 10 МБ и сохранить его в виде массива для дальнейшей обработки.
Все выглядит нормально при использовании прямого звонка на (New-Object System.Net.WebClient).DownloadData("<url>")
. Но если я оберну его внутри функции и верну результат вызова WebClient::DownloadData
объем памяти увеличится примерно до 500 МБ.
Функция, которую я использую:
function My-Download {
param (
[Parameter(Mandatory = $True, Position = 1)] [String] $UrlCode
)
(New-Object System.Net.WebClient).DownloadData($UrlCode)
}
$x = My-Download("https://file-examples.com/wp-content/uploads/2017/04/file_example_MP4_1280_10MG.mp4")
Причина, по которой я обернул ее внутри функции, заключается в том, что я также выполняю дополнительную обработку данных перед их возвратом, но даже этот небольшой пример иллюстрирует проблему.
Вызов $x = (New-Object System.Net.WebClient).DownloadData("https://file-examples.com/wp-content/uploads/2017/04/file_example_MP4_1280_10MG.mp4")
приводит к 83 МБ:
![direct call memory consumption](https://i.imgur.com/88LRfuR.png)
Вызов вышеуказанной функции приводит к 500 МБ:
![wrapper function memory consumption](https://i.imgur.com/rJNIQzO.png)
В чем причина такого высокого использования памяти и что я могу сделать, чтобы оптимизировать его?
Версия Powershell:
Major Minor Build Revision
----- ----- ----- --------
5 1 17134 407