我有一个4MB的文件,并决定从Powershell加载它,所以执行下面的代码
[byte[]]$bytes = Get-Content $file -Encoding byte
然而,这行代码运行无穷大,似乎没有完成,并且越来越多地消耗大量的RAM内存。 对此有什么建议吗?
如果你使用不带-Raw
的-Encoding Byte
,那么Get-Content
会将每个单独的字节写成单独的对象。 Get-Content
还向每个对象添加了一些额外的属性。这导致每个对象的内存开销非常大(在我的测试中为 1.4KB+(x64、v5.1((。因此,您需要6GB的内存来加载4MB这样的文件。如果这不适合RAM,那么您将进行大量交换,这使得该过程非常缓慢。使用-Raw
Get-Content
将整个文件作为单个[Byte[]]
读取,这大大减少了每个字节的开销。