pooling []byte

reduce the number of requests to make([]byte)
This commit is contained in:
chrislusf
2016-04-14 01:30:26 -07:00
parent 95e0d2f1b2
commit 0649d778a7
9 changed files with 216 additions and 7 deletions

View File

@@ -136,15 +136,33 @@ func (n *Needle) Append(w io.Writer, version Version) (size uint32, err error) {
return 0, fmt.Errorf("Unsupported Version! (%d)", version)
}
func ReadNeedleBlob(r *os.File, offset int64, size uint32) (bytes []byte, err error) {
func ReleaseBytes(b []byte) {
// println("Releasing", len(b))
BYTESPOOL.Put(b)
}
func BorrwoBytes(size int) []byte {
ret := BYTESPOOL.Get(size)
// println("Reading", len(ret))
return ret
}
func ReadNeedleBlob(r *os.File, offset int64, size uint32) (dataSlice, rawBytes []byte, err error) {
padding := NeedlePaddingSize - ((NeedleHeaderSize + size + NeedleChecksumSize) % NeedlePaddingSize)
bytes = make([]byte, NeedleHeaderSize+size+NeedleChecksumSize+padding)
_, err = r.ReadAt(bytes, offset)
readSize := NeedleHeaderSize + size + NeedleChecksumSize + padding
rawBytes = BorrwoBytes(int(readSize))
dataSlice = rawBytes[0:int(readSize)]
_, err = r.ReadAt(dataSlice, offset)
return
}
func (n *Needle) ReleaseMemory() {
ReleaseBytes(n.rawBytes)
}
func (n *Needle) ReadData(r *os.File, offset int64, size uint32, version Version) (err error) {
bytes, err := ReadNeedleBlob(r, offset, size)
bytes, rawBytes, err := ReadNeedleBlob(r, offset, size)
n.rawBytes = rawBytes
if err != nil {
return err
}