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