Pre-size net.Buffers

This leads to a further reduction in allocations per call. Before:
	goos: linux
	goarch: amd64
	pkg: src.lwithers.me.uk/go/journal
	cpu: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
	BenchmarkEntry-8   	12611158	    1445 ns/op	   221 B/op	     7 allocs/op
	PASS
	ok  	src.lwithers.me.uk/go/journal	19.673s

After:
	goos: linux
	goarch: amd64
	pkg: src.lwithers.me.uk/go/journal
	cpu: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
	BenchmarkEntry-8   	13613377	     1329 ns/op	    149 B/op	      5 allocs/op
	PASS
	ok  	src.lwithers.me.uk/go/journal	19.435s
This commit is contained in:
Laurence Withers 2024-02-18 14:31:13 +00:00
parent d3666c9152
commit c579349c05
1 changed files with 2 additions and 0 deletions

View File

@ -4,6 +4,7 @@ import (
"encoding/binary" "encoding/binary"
"io" "io"
"net" "net"
"slices"
) )
var ( var (
@ -19,6 +20,7 @@ var (
// atomic, and this function is safe to use across goroutines. Otherwise, // atomic, and this function is safe to use across goroutines. Otherwise,
// writes may be interleaved. // writes may be interleaved.
func WireWrite(buf *net.Buffers, w io.Writer, attrs []Attr) error { func WireWrite(buf *net.Buffers, w io.Writer, attrs []Attr) error {
*buf = slices.Grow(*buf, len(*buf)+len(attrs)*4)
for i := range attrs { for i := range attrs {
key := attrs[i].Key.key key := attrs[i].Key.key
if key == "" { if key == "" {