소스 검색

lib/scanner: Avoid per iteration allocations in Blocks()

Resetting the io.LimitReader is better than creating a new one on every
iteration.
Jakob Borg 8 년 전
부모
커밋
68f1c6ccab
1개의 변경된 파일2개의 추가작업 그리고 1개의 파일을 삭제
  1. 2 1
      lib/scanner/blocks.go

+ 2 - 1
lib/scanner/blocks.go

@@ -45,8 +45,9 @@ func Blocks(r io.Reader, blocksize int, sizehint int64, counter Counter) ([]prot
 	buf := make([]byte, 32<<10)
 
 	var offset int64
+	lr := io.LimitReader(r, int64(blocksize)).(*io.LimitedReader)
 	for {
-		lr := io.LimitReader(r, int64(blocksize))
+		lr.N = int64(blocksize)
 		n, err := io.CopyBuffer(mhf, lr, buf)
 		if err != nil {
 			return nil, err