Powershell:转换为字节数组运行无穷大

时间:2017-07-01 06:50:57

标签: arrays powershell casting

我有一个4MB的文件并决定从Powershell加载它,所以下面的代码被执行

[byte[]]$bytes = Get-Content $file -Encoding byte

然而,这行代码运行无穷大,似乎没有完成&越来越多地消耗大量的RAM内存。 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果您使用-Encoding Byte而不使用-Raw,则Get-Content会将每个字节写为单独的对象。 Get-Content还为每个对象添加了一些额外的属性。这导致每个对象的内存开销非常大(在我的测试中为1.4KB +(x64,v5.1))。所以,你需要像6GB的内存来加载像这样的4MB文件。如果它不适合RAM,那么你将进行大量交换,这使得这个过程非常缓慢。使用-Raw Get-Content会将整个文件读为单个[Byte[]],从而大大减少每个字节的开销。