Reduce memory allocation events

Former-commit-id: fbdb2afc857b02adc2593e2278d3bd838e99b0b2
This commit is contained in:
Eric Coissac
2024-06-22 21:01:53 +02:00
parent 54a138196c
commit e6b87ecd02
19 changed files with 166 additions and 75 deletions

View File

@ -12,6 +12,7 @@ package obiseq
import (
"crypto/md5"
"slices"
"sync"
"sync/atomic"
@ -418,12 +419,15 @@ func (s *BioSequence) SetFeatures(feature []byte) {
s.feature = feature
}
// Setting the sequence of the BioSequence.
// SetSequence sets the sequence of the BioSequence.
//
// Parameters:
// - sequence: a byte slice representing the sequence to be set.
func (s *BioSequence) SetSequence(sequence []byte) {
if s.sequence != nil {
RecycleSlice(&s.sequence)
}
s.sequence = CopySlice(obiutils.InPlaceToLower(sequence))
s.sequence = obiutils.InPlaceToLower(CopySlice(sequence))
}
// Setting the qualities of the BioSequence.
@ -507,3 +511,15 @@ func (s *BioSequence) Composition() map[byte]int {
return counts
}
func (s *BioSequence) Grow(length int) {
if s.sequence == nil {
s.sequence = GetSlice(length)
} else {
s.sequence = slices.Grow(s.sequence, length)
}
if s.qualities != nil {
s.qualities = slices.Grow(s.qualities, length)
}
}

View File

@ -84,7 +84,7 @@ func CopySlice(src []byte) []byte {
var BioSequenceAnnotationPool = sync.Pool{
New: func() interface{} {
bs := make(Annotation, 5)
bs := make(Annotation, 1)
return &bs
},
}
@ -105,15 +105,17 @@ func RecycleAnnotation(a *Annotation) {
//
// It returns an Annotation.
func GetAnnotation(values ...Annotation) Annotation {
a := Annotation(nil)
a := (*Annotation)(nil)
for a == nil {
a = *(BioSequenceAnnotationPool.Get().(*Annotation))
for a == nil || (*a == nil) {
a = BioSequenceAnnotationPool.Get().(*Annotation)
}
annot := *a
if len(values) > 0 {
obiutils.MustFillMap(a, values[0])
obiutils.MustFillMap(annot, values[0])
}
return a
return annot
}