今天我在我的 1 核 2g 云服务器上处理 20 多万 excel 数据的时候直接把内存搞爆了!程序直接 kill 了! 其 1. 我没想到会有这么多数据,所以对 excel 读取后的处理没有分割处理,直接 apped 追加到一个新数组再分割数组分批次入库 其 2. 有些我在传递的时候是值传递。在 for 循环 append 直接追加的值。后面我改成了
//指针传递
a := append(a, &a)
func SplitArr(data []interface{}, number int) [][]interface{} {
//临时数据
var temp [][]interface{}
//统计有多少数据
count := len(data)
//每个子数组多少条数据
pageNumber := number
//分割数量
page := int(math.Ceil(float64(count) / float64(pageNumber)))
for i := 0; i < page; i++ {
if i == page-1 {
step := i * pageNumber
temp = append(temp, data[step:])
} else if i == 0 {
temp = append(temp, data[i:pageNumber])
} else {
currentStep := i * pageNumber
nextStep := currentStep + pageNumber
temp = append(temp, data[currentStep:nextStep])
}
}
return temp
}
1.我在 for range 的时候不是指针追加 是不是循环的时候内存越增越大?? 2.不是指针传递 := 赋值是不是又开辟了一块新内存存的相同的值,却不同内存地址
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.