io: optimize BinReader.ReadArray()

reflect.MethodByName is a rather expensive function especially when
called on hot path. This became obvious during profiling of db restore.
This commit replaces reflection with a cast to an interface.
This commit is contained in:
Evgenii Stratonikov 2019-12-06 18:13:52 +03:00
parent e4d821f32d
commit 1784a14148
3 changed files with 18 additions and 33 deletions

View file

@ -326,15 +326,10 @@ func TestBinReader_ReadArray(t *testing.T) {
require.NoError(t, r.Err)
require.Equal(t, []testSerializable{}, arrVal)
r = NewBinReaderFromBuf([]byte{0})
r.Err = errors.New("error")
require.Panics(t, func() { r.ReadArray(&[]*int{}) })
r = NewBinReaderFromBuf([]byte{1})
require.Panics(t, func() { r.ReadArray(&[]int{1}) })
r = NewBinReaderFromBuf([]byte{0})
r.Err = errors.New("error")
require.Panics(t, func() { r.ReadArray(&[]int{}) })
r = NewBinReaderFromBuf([]byte{0})
r.Err = errors.New("error")
require.Panics(t, func() { r.ReadArray(0) })
require.Panics(t, func() { r.ReadArray(1) })
}