У меня возникли проблемы с пониманием того, что происходит и почему это происходит.У меня есть небольшая функция, которая захватывает все байты большого файла изображения PNG размером 133 МБ, сохраняет его в байтовом массиве и возвращает его.Есть ли какое-то поведение, которого я не понимаю, или, возможно, ошибка в PowerShell?
$TestFile = 'C:\test.png'
function GetByteArray($InputFile) {
$ByteArray = [IO.File]::ReadAllBytes($InputFile)
Write-Host ( 'Type: ' + $ByteArray.GetType() )
Write-Host ( 'Size: ' + $ByteArray.Length )
return $ByteArray
}
$NewArray = GetByteArray -InputFile $TestFile
Write-Host ( 'Type: ' + $NewArray.GetType() )
Write-Host ( 'Size: ' + $NewArray.Length )
pause
Я ожидаю, что функция вернет [Byte[]]
размером около 133 МБ, но это не так.Вместо этого PowerShell использует около 5 ГБ ОЗУ, распечатывает сообщение об ошибке ниже и возвращает [System.Object[]]
.
Type: byte[]
Size: 140151164
Array dimensions exceeded supported range.
At F:\test.ps1:10 char:10
+ return $ByteArray
+ ~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], OutOfMemoryException
+ FullyQualifiedErrorId : System.OutOfMemoryException
Type: System.Object[]
Size: 134217728
Press Enter to continue...:
Что я не понимаю?Почему байтовый массив преобразуется в объект?Почему съедает почти всю мою оперативную память?