在golang

时间:2016-10-03 14:40:31

标签: go

用例:

  1. 阅读Postgres表格中的内容
  2. 处理行写入文件
  3. 将内容写入文件
  4. 所以我使用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,缓冲区将被刷新到底层编写器,后者将数据写入文件。因此,整个操作中的内存使用几乎是恒定的。

    我的理解错在哪里?我还能做些什么来确保记忆能够得到控制?

0 个答案:

没有答案