refactor: reduce GC pressure by pre-allocating slices

Signed-off-by: Deluan <deluan@navidrome.org>
This commit is contained in:
Deluan
2024-11-19 07:45:24 -05:00
parent 3982ba7258
commit d229ff39e5
10 changed files with 325 additions and 262 deletions
+13 -15
View File
@@ -108,11 +108,9 @@ type MediaFiles []MediaFile
// Dirs returns a deduped list of all directories from the MediaFiles' paths
func (mfs MediaFiles) Dirs() []string {
var dirs []string
for _, mf := range mfs {
dir, _ := filepath.Split(mf.Path)
dirs = append(dirs, filepath.Clean(dir))
}
dirs := slice.Map(mfs, func(m MediaFile) string {
return filepath.Dir(m.Path)
})
slices.Sort(dirs)
return slices.Compact(dirs)
}
@@ -121,16 +119,16 @@ func (mfs MediaFiles) Dirs() []string {
// It assumes all mediafiles have the same Album, or else results are unpredictable.
func (mfs MediaFiles) ToAlbum() Album {
a := Album{SongCount: len(mfs)}
var fullText []string
var albumArtistIds []string
var songArtistIds []string
var mbzAlbumIds []string
var comments []string
var years []int
var dates []string
var originalYears []int
var originalDates []string
var releaseDates []string
fullText := make([]string, 0, len(mfs))
albumArtistIds := make([]string, 0, len(mfs))
songArtistIds := make([]string, 0, len(mfs))
mbzAlbumIds := make([]string, 0, len(mfs))
comments := make([]string, 0, len(mfs))
years := make([]int, 0, len(mfs))
dates := make([]string, 0, len(mfs))
originalYears := make([]int, 0, len(mfs))
originalDates := make([]string, 0, len(mfs))
releaseDates := make([]string, 0, len(mfs))
for _, m := range mfs {
// We assume these attributes are all the same for all songs on an album
a.ID = m.AlbumID