diff --git a/excelize_test.go b/excelize_test.go index 7b6b674..8d7e7f7 100644 --- a/excelize_test.go +++ b/excelize_test.go @@ -1278,3 +1278,9 @@ func fillCells(f *File, sheet string, colCount, rowCount int) { } } } + +func BenchmarkOpenFile(b *testing.B) { + for i := 0; i < b.N; i++ { + OpenFile(filepath.Join("test", "Book1.xlsx")) + } +} diff --git a/lib.go b/lib.go index 4dea16a..edac98a 100644 --- a/lib.go +++ b/lib.go @@ -22,14 +22,12 @@ import ( // ReadZipReader can be used to read an XLSX in memory without touching the // filesystem. func ReadZipReader(r *zip.Reader) (map[string][]byte, int, error) { - fileList := make(map[string][]byte) + fileList := make(map[string][]byte, len(r.File)) worksheets := 0 for _, v := range r.File { fileList[v.Name] = readFile(v) - if len(v.Name) > 18 { - if v.Name[0:19] == "xl/worksheets/sheet" { - worksheets++ - } + if strings.HasPrefix(v.Name, "xl/worksheets/sheet") { + worksheets++ } } return fileList, worksheets, nil @@ -58,7 +56,8 @@ func readFile(file *zip.File) []byte { if err != nil { log.Fatal(err) } - buff := bytes.NewBuffer(nil) + dat := make([]byte, 0, file.FileInfo().Size()) + buff := bytes.NewBuffer(dat) _, _ = io.Copy(buff, rc) rc.Close() return buff.Bytes() diff --git a/rows_test.go b/rows_test.go index ba81f9f..f0fbe03 100644 --- a/rows_test.go +++ b/rows_test.go @@ -695,8 +695,8 @@ func TestErrSheetNotExistError(t *testing.T) { } func BenchmarkRows(b *testing.B) { + f, _ := OpenFile(filepath.Join("test", "Book1.xlsx")) for i := 0; i < b.N; i++ { - f, _ := OpenFile(filepath.Join("test", "Book1.xlsx")) rows, _ := f.Rows("Sheet2") for rows.Next() { row, _ := rows.Columns()