我想从object创建JSON字符串。
$vms=Get-VM
$val = 0
Write-Host "This script is set up for quickly creating and initilizing VHDs"
$Path = Read-Host "Please enter the path you want to create the drives to. Use the formate in this example <E:\VHDS\>"
$fileName = Read-Host "The Drive will be <target>-<number>.vhdx. Please Name the target "
$vhdSize = 1GB
$vmAmount = Read-Host "How many Drives should be attached to each VM?"
foreach ($vm in $vms)
{
$n = $vm.Name
while ($val -ne $vmAmount)
{
$vhdPath = ($Path + $fileName + '-' + $val + '.vhdx')
New-VHD -Path $vhdPath -SizeBytes $vhdSize -Fixed | Mount-VHD -Passthru | Initialize-Disk -Passthru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -Confirm:$false -Force | Dismount-VHD -Passthru
Add-VMHardDiskDrive -VMName $n -Path $vhdPath
$val++
}
}
某些对象很大,创建JSON字符串需要很长时间。 要创建8MB JSON字符串,它需要大约15秒。
我该如何改善这个?
答案 0 :(得分:1)
确保你有足够的内存:用于存储8 MB序列化JSON的Java字符串需要大约16兆字节的连续内存。
但更重要的是:为什么要在内存中创建java.lang.String
?
对于如此巨大的String有什么用?
如果您需要将JSON内容写入文件,则有不同的方法;类似地写入网络套接字。至少你可以将输出写为byte[]
(减少50%的内存),但在大多数情况下,增量写入外部流只需要很少的内存。
修改强>:
刚刚意识到在构造结果String期间,临时内存使用量也会加倍,因为构造String
时缓冲内容尚未清除。所以8 MB需要至少32 MB来构造String。如果默认堆为64 MB,则无法正常工作。