读取http.Do返回的Response.Body,时间久了,内存占用在一路上升。
部分代码:
if response != nil {
defer response.Body.Close()
}
read body:
func _ReadResponseBody(r *http.Response) []byte {
buffer := bytes.NewBuffer(make([]byte, 0, 65536))
io.Copy(buffer, r.Body)
temp := buffer.Bytes()
length := len(temp)
var body []byte
if cap(temp) > (length + length/10) {
body = make([]byte, length)
copy(body, temp)
} else {
body = temp
}
return body
}
stackimpact分析
看代码我感觉你没有理解原文的意思
首先来看你的代码是非常麻烦,申请了大量内存
而原文的意思我猜就是为了避免频繁申请内存才申请了这一大块内存
这句代码应该是一个全局变量
buffer = bytes.NewBuffer(make([]byte, 0, 65536))
然后每次填充数据前先
buffer.Reset()
最后每次http后的数据都填充到这段内存中,从而避免频繁申请内存