mirror of
https://github.com/imgproxy/imgproxy.git
synced 2025-09-27 20:17:20 +02:00
Improve download buffer calibration
This commit is contained in:
15
bufpool.go
15
bufpool.go
@@ -47,14 +47,7 @@ func (p *bufPool) calibrateAndClean() {
|
|||||||
score := p.calls[pos]
|
score := p.calls[pos]
|
||||||
|
|
||||||
p.callInd = 0
|
p.callInd = 0
|
||||||
p.maxSize = 64
|
p.maxSize = p.normalizeSize(score)
|
||||||
|
|
||||||
for {
|
|
||||||
if p.maxSize > score {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
p.maxSize <<= 1
|
|
||||||
}
|
|
||||||
|
|
||||||
p.defaultSize = maxInt(p.defaultSize, p.calls[0])
|
p.defaultSize = maxInt(p.defaultSize, p.calls[0])
|
||||||
p.maxSize = maxInt(p.defaultSize, p.maxSize)
|
p.maxSize = maxInt(p.defaultSize, p.maxSize)
|
||||||
@@ -82,6 +75,8 @@ func (p *bufPool) Get(size int) *bytes.Buffer {
|
|||||||
p.mutex.Lock()
|
p.mutex.Lock()
|
||||||
defer p.mutex.Unlock()
|
defer p.mutex.Unlock()
|
||||||
|
|
||||||
|
size = p.normalizeSize(size)
|
||||||
|
|
||||||
minSize, maxSize, minInd, maxInd := -1, -1, -1, -1
|
minSize, maxSize, minInd, maxInd := -1, -1, -1, -1
|
||||||
|
|
||||||
for i := 0; i < len(p.buffers); i++ {
|
for i := 0; i < len(p.buffers); i++ {
|
||||||
@@ -155,3 +150,7 @@ func (p *bufPool) Put(buf *bytes.Buffer) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *bufPool) normalizeSize(n int) int {
|
||||||
|
return (n/bytes.MinRead + 2) * bytes.MinRead
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user