extrame / xls

Pure Golang xls library
Apache License 2.0
329 stars 207 forks source link

[OOM] resource not release #68

Closed xiaoxfan closed 3 years ago

xiaoxfan commented 4 years ago

I have a large amount of excel sheets. so I use a for loop to parse the data of each excel then I got an OOM

func Foo() {
    for {
        xlFile, err := xls.Open("example.xls", "utf-8")
                // when it done.memory does not free
        if err != nil || xlFile == nil {
            fmt.Println(err)
        }
        sheets := xlFile.NumSheets()
        for i := 0; i < sheets; i++ {
            if sheet := xlFile.GetSheet(i); sheet != nil {
                for i := 0; i <= (int(sheet.MaxRow)); i++ {
                    row1 := sheet.Row(i)
                    if row1 == nil {
                        continue
                    }
                    for i := row1.FirstCol(); i <= row1.LastCol(); i++ {
                        colCell := row1.Col(i)
                        fmt.Println(colCell)
                    }
                }
            }
        }
    }
}
chaunsin commented 3 years ago

I have a large amount of excel sheets. so I use a for loop to parse the data of each excel then I got an OOM

func Foo() {
  for {
      xlFile, err := xls.Open("example.xls", "utf-8")
                // when it done.memory does not free
      if err != nil || xlFile == nil {
          fmt.Println(err)
      }
      sheets := xlFile.NumSheets()
      for i := 0; i < sheets; i++ {
          if sheet := xlFile.GetSheet(i); sheet != nil {
              for i := 0; i <= (int(sheet.MaxRow)); i++ {
                  row1 := sheet.Row(i)
                  if row1 == nil {
                      continue
                  }
                  for i := row1.FirstCol(); i <= row1.LastCol(); i++ {
                      colCell := row1.Col(i)
                      fmt.Println(colCell)
                  }
              }
          }
      }
  }
}

i tihink xls.Open() method the file handle is not closed is bug,but you can do that:

fd, err := os.Open(file) if err != nil { return nil, err } defer fd.Close()//close file handle! f, err := xls.OpenReader(fd, "utf-8") if err != nil { return nil, err } sheet1 := f.GetSheet(0)

I have initiated issues :https://github.com/extrame/xls/issues/76