用例:
所以我使用postgres / sql从表中读取行并缓冲写入器将处理后的行写入文件。我还注意确保在每行的末尾刷新缓冲区,以便我可以控制内存。但是在处理接近200000行时,我仍然可以看到内存高达1.5 GB。
代码段如下:
r, e := c.Query("select * from tab1")
if e != nil {
fmt.Println("Error while query", e.Error())
}
c.Close()
//file is the filehandler for the output file
fileWriter := bufio.NewWriter(file)
for r.Next() {
var res *StatsData = &StatsData{}
e = sqlstruct.Scan(res, r)
if e != nil {
fmt.Println("Failed to scan", e.Error())
continue
}
dt := p.CalculateData(*res)
fileWriter.Write([]byte(dt))
fileWriter.Flush()
res = nil
}
r.Close()
file.Close()
我预计,由于我在每个循环结束时刷新fileWriter,缓冲区将被刷新到底层编写器,后者将数据写入文件。因此,整个操作中的内存使用几乎是恒定的。
我的理解错在哪里?我还能做些什么来确保记忆能够得到控制?