File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -23,9 +23,9 @@ func TestReadWrite(t *testing.T) {
2323}
2424
2525func BenchmarkReadPacket (b * testing.B ) {
26+ var buf [1024 ]byte
2627 for i := 0 ; i < b .N ; i ++ {
27- s := bytes.Buffer {}
28- s .WriteString ("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" )
29- ReadPacket (& s )
28+ s := bytes .NewReader (buf [:])
29+ ReadPacket (s )
3030 }
3131}
Original file line number Diff line number Diff line change @@ -5,12 +5,15 @@ import (
55 "crypto/tls"
66 "io"
77 "net"
8+ "sync"
89 "time"
910
1011 "github.com/nim4/DBShield/dbshield/logger"
1112 "github.com/nim4/DBShield/dbshield/sql"
1213)
1314
15+ const maxPayloadLen = 1 << 24 - 1
16+
1417//MySQL DBMS
1518type MySQL struct {
1619 client net.Conn
@@ -185,11 +188,17 @@ func (m *MySQL) handleLogin() (success bool, err error) {
185188 return
186189}
187190
191+ //buffer pool for MySQLReadPacket
192+ var dataPool = sync.Pool {
193+ New : func () interface {} {
194+ return make ([]byte , maxPayloadLen )
195+ },
196+ }
197+
188198//MySQLReadPacket handles decoding packet len and reading payload
189199func MySQLReadPacket (src io.Reader ) ([]byte , error ) {
190- const maxPayloadLen = 1 << 24 - 1
191-
192- data := make ([]byte , maxPayloadLen )
200+ data := dataPool .Get ().([]byte )
201+ defer dataPool .Put (data )
193202 n , err := src .Read (data )
194203 if err != nil && err != io .EOF {
195204 return nil , err
Original file line number Diff line number Diff line change 11package dbms_test
22
33import (
4+ "bytes"
45 "errors"
56 "io"
67 "testing"
@@ -155,3 +156,11 @@ func TestGetUsernameDB(t *testing.T) {
155156 t .Error ("Expected empty username & db name got" , string (u ), string (d ))
156157 }
157158}
159+
160+ func BenchmarkMySQLReadPacket (b * testing.B ) {
161+ var buf [1024 ]byte
162+ for i := 0 ; i < b .N ; i ++ {
163+ s := bytes .NewReader (buf [:])
164+ dbms .MySQLReadPacket (s )
165+ }
166+ }
You can’t perform that action at this time.
0 commit comments