1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 11:07:40 +08:00

jce: optimize readByte.

name                            old time/op    new time/op    delta
JceReader_ReadSlice-8              271µs ± 2%     228µs ± 7%  -15.97%  (p=0.000 n=9+10)
RequestDataVersion2_ReadFrom-8    4.57µs ± 6%    4.08µs ± 2%  -10.74%  (p=0.000 n=10+10)

name                            old speed      new speed      delta
JceReader_ReadSlice-8           77.6MB/s ± 2%  92.5MB/s ± 7%  +19.14%  (p=0.000 n=9+10)
RequestDataVersion2_ReadFrom-8  20.4MB/s ± 6%  22.8MB/s ± 2%  +11.92%  (p=0.000 n=10+10)

name                            old alloc/op   new alloc/op   delta
JceReader_ReadSlice-8             73.4kB ± 0%    65.3kB ± 0%  -10.96%  (p=0.000 n=9+6)
RequestDataVersion2_ReadFrom-8    2.64kB ± 0%    2.59kB ± 0%   -1.93%  (p=0.000 n=10+10)

name                            old allocs/op  new allocs/op  delta
JceReader_ReadSlice-8              6.02k ± 0%     3.01k ± 0%  -49.96%  (p=0.000 n=10+10)
RequestDataVersion2_ReadFrom-8      67.0 ± 0%      46.0 ± 0%  -31.34%  (p=0.000 n=10+10)
This commit is contained in:
wdvxdr 2021-08-17 16:27:58 +08:00
parent 0ca0c6ea45
commit 53ac47950c
No known key found for this signature in database
GPG Key ID: 703F8C071DE7A1B6
2 changed files with 13 additions and 9 deletions

View File

@ -3,13 +3,13 @@ package jce
import (
"bytes"
goBinary "encoding/binary"
"io"
"math"
"reflect"
)
type JceReader struct {
buf *bytes.Reader
data []byte
}
type HeadData struct {
@ -19,7 +19,7 @@ type HeadData struct {
func NewJceReader(data []byte) *JceReader {
buf := bytes.NewReader(data)
return &JceReader{buf: buf, data: data}
return &JceReader{buf: buf}
}
func (r *JceReader) readHead() (hd HeadData, l int32) {
@ -34,10 +34,10 @@ func (r *JceReader) readHead() (hd HeadData, l int32) {
return hd, 1
}
func (r *JceReader) peakHead() (HeadData, int32) {
offset := r.buf.Size() - int64(r.buf.Len())
n := NewJceReader(r.data[offset:])
return n.readHead()
func (r *JceReader) peakHead() (h HeadData, l int32) {
h, l = r.readHead()
_, _ = r.buf.Seek(int64(-l), io.SeekCurrent)
return
}
func (r *JceReader) skip(l int) {
@ -99,7 +99,11 @@ func (r *JceReader) readBytes(len int) []byte {
}
func (r *JceReader) readByte() byte {
return r.readBytes(1)[0]
b, err := r.buf.ReadByte()
if err != nil {
panic(err)
}
return b
}
func (r *JceReader) readUInt16() uint16 {

View File

@ -35,7 +35,7 @@ func BenchmarkJceReader_ReadSlice(b *testing.B) {
src := w.Bytes()
b.SetBytes(int64(len(src)))
b.StartTimer()
var result = []BigDataIPInfo{}
result := make([]BigDataIPInfo, 0)
for i := 0; i < b.N; i++ {
r := NewJceReader(src)
r.ReadSlice(&result, 1)