From 3db12e2e2f550ade9670efbe2ad72608845bb88e Mon Sep 17 00:00:00 2001 From: Alberto Cortés Date: Tue, 26 Jan 2016 02:26:38 +0100 Subject: Speed up packfile reading By adding a bufio to the trackingReader, otherwise most of the time is spent in syscalls for small reads to the packfile. --- formats/packfile/common.go | 7 +++++++ formats/packfile/reader.go | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'formats/packfile') diff --git a/formats/packfile/common.go b/formats/packfile/common.go index 06c63d4..57bc0b9 100644 --- a/formats/packfile/common.go +++ b/formats/packfile/common.go @@ -1,6 +1,7 @@ package packfile import ( + "bufio" "fmt" "io" ) @@ -10,6 +11,12 @@ type trackingReader struct { position int64 } +func NewTrackingReader(r io.Reader) *trackingReader { + return &trackingReader{ + r: bufio.NewReader(r), + } +} + func (t *trackingReader) Read(p []byte) (n int, err error) { n, err = t.r.Read(p) if err != nil { diff --git a/formats/packfile/reader.go b/formats/packfile/reader.go index 3ff342f..37918b1 100644 --- a/formats/packfile/reader.go +++ b/formats/packfile/reader.go @@ -59,7 +59,7 @@ func NewReader(r io.Reader) *Reader { return &Reader{ MaxObjectsLimit: DefaultMaxObjectsLimit, - r: &trackingReader{r: r}, + r: NewTrackingReader(r), offsets: make(map[int64]core.Hash, 0), } } -- cgit