Procházet zdrojové kódy

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

Resetting the io.LimitReader is better than creating a new one on every
iteration.
Jakob Borg před 8 roky
rodič
revize
68f1c6ccab
1 změnil soubory, kde provedl 2 přidání a 1 odebrání
  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)
 	buf := make([]byte, 32<<10)
 
 
 	var offset int64
 	var offset int64
+	lr := io.LimitReader(r, int64(blocksize)).(*io.LimitedReader)
 	for {
 	for {
-		lr := io.LimitReader(r, int64(blocksize))
+		lr.N = int64(blocksize)
 		n, err := io.CopyBuffer(mhf, lr, buf)
 		n, err := io.CopyBuffer(mhf, lr, buf)
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err