我想知道我是否錯誤地編寫了 Go 程序,或者我的服務器資源是否太小。我有以下代碼: spotXmlFile:='/var/www/html/app/public/xml/appdata.xml' xmlFile,err:=os.Open(spotXmlFile) defer xmlFile.Close() byteValue,_:=ioutil.ReadAll(xmlFile) var listings Listings xml.Unmarshal(byteValue,&listings)它處理一個 2.5GB 的 xml 文件。我正在aws ec2 t3.large嘗試處理數據,其中2 cpus有8GB mem有趣的是內存不超過4GB,但CPU卻飆升至100%,然后導致程序失敗
1 回答

鴻蒙傳說
TA貢獻1865條經驗 獲得超7個贊
您正在讀取內存中的整個文件,然后對其進行解組,這將使用您并不真正需要的大量額外內存。試試這個,看看會發生什么:
spotXmlFile:='/var/www/html/app/public/xml/appdata.xml'
xmlFile,err:=os.Open(spotXmlFile)
defer xmlFile.Close()
var listings Listings
xml.NewDecoder(xmlFile).Decode(&listings)
使用解碼器,它將在讀取時解析和解組底層文件。
如果您只需要文件的一部分并且想要進一步優化它,您可以使用解碼器令牌逐個令牌對文件進行解碼,并提取您需要的部分。
- 1 回答
- 0 關注
- 139 瀏覽
添加回答
舉報
0/150
提交
取消