diff --git a/ui/build/finder.go b/ui/build/finder.go
index 011b5b59e..574c31e6d 100644
--- a/ui/build/finder.go
+++ b/ui/build/finder.go
@@ -16,7 +16,7 @@ package build
 
 import (
 	"bytes"
-	"io/ioutil"
+	"io"
 	"os"
 	"path/filepath"
 	"strings"
@@ -98,7 +98,7 @@ func NewSourceFinder(ctx Context, config Config) (f *finder.Finder) {
 		},
 	}
 	dumpDir := config.FileListDir()
-	f, err = finder.New(cacheParams, filesystem, logger.New(ioutil.Discard),
+	f, err = finder.New(cacheParams, filesystem, logger.New(io.Discard),
 		filepath.Join(dumpDir, "files.db"))
 	if err != nil {
 		ctx.Fatalf("Could not create module-finder: %v", err)
@@ -107,7 +107,7 @@ func NewSourceFinder(ctx Context, config Config) (f *finder.Finder) {
 }
 
 func findProductAndBoardConfigFiles(entries finder.DirEntries) (dirNames []string, fileNames []string) {
-	matches := []string{}
+	matches := make([]string, 0, len(entries.FileNames))
 	for _, foundName := range entries.FileNames {
 		if foundName != "Android.mk" &&
 			foundName != "AndroidProducts.mk" &&
@@ -120,7 +120,7 @@ func findProductAndBoardConfigFiles(entries finder.DirEntries) (dirNames []strin
 }
 
 func findOtaToolsCertFiles(entries finder.DirEntries) (dirNames []string, fileNames []string) {
-	matches := []string{}
+	matches := make([]string, 0, len(entries.FileNames))
 	for _, foundName := range entries.FileNames {
 		if strings.HasSuffix(foundName, ".pk8") ||
 			strings.HasSuffix(foundName, ".pem") ||
@@ -198,11 +198,17 @@ func FindSources(ctx Context, config Config, f *finder.Finder) {
 	}
 
 	// Recursively look for all duplicate_allowlist.txt files where we found release_config_map.textproto.
-	var duplicateAllowlists []string
+	duplicateAllowlists := make([]string, 0, len(releaseConfigMaps))
+	seenReleaseConfigDirs := make(map[string]struct{}, len(releaseConfigMaps))
 	for _, mapPath := range releaseConfigMaps {
 		// The only `duplicate_allowlist.txt` files we care about are in the same directory
 		// as `release_config_map.textproto`.
-		duplicateAllowlists = append(duplicateAllowlists, f.FindNamedAt(filepath.Dir(mapPath), "duplicate_allowlist.txt")...)
+		dir := filepath.Dir(mapPath)
+		if _, seen := seenReleaseConfigDirs[dir]; seen {
+			continue
+		}
+		seenReleaseConfigDirs[dir] = struct{}{}
+		duplicateAllowlists = append(duplicateAllowlists, f.FindNamedAt(dir, "duplicate_allowlist.txt")...)
 	}
 	err = dumpListToFile(ctx, config, duplicateAllowlists, filepath.Join(dumpDir, "duplicate_allowlist.list"))
 	if err != nil {
@@ -253,11 +259,10 @@ func FindSources(ctx Context, config Config, f *finder.Finder) {
 
 // Write the .list files to disk.
 func dumpListToFile(ctx Context, config Config, list []string, filePath string) (err error) {
-	desiredText := strings.Join(list, "\n")
-	desiredBytes := []byte(desiredText)
-	actualBytes, readErr := ioutil.ReadFile(filePath)
+	desiredBytes := serializeList(list)
+	actualBytes, readErr := os.ReadFile(filePath)
 	if readErr != nil || !bytes.Equal(desiredBytes, actualBytes) {
-		err = ioutil.WriteFile(filePath, desiredBytes, 0777)
+		err = os.WriteFile(filePath, desiredBytes, 0777)
 		if err != nil {
 			return err
 		}
@@ -268,6 +273,26 @@ func dumpListToFile(ctx Context, config Config, list []string, filePath string)
 	return nil
 }
 
+func serializeList(list []string) []byte {
+	if len(list) == 0 {
+		return nil
+	}
+
+	totalSize := len(list) - 1 // newline separators
+	for _, item := range list {
+		totalSize += len(item)
+	}
+
+	buf := bytes.NewBuffer(make([]byte, 0, totalSize))
+	for i, item := range list {
+		if i > 0 {
+			buf.WriteByte('\n')
+		}
+		buf.WriteString(item)
+	}
+	return buf.Bytes()
+}
+
 func ignoreNonAndroidMetadataFiles(metadataFiles []string) []string {
 	result := make([]string, 0, len(metadataFiles))
 	for _, file := range metadataFiles {
