Cache config/setting file misses too #417
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
SettingsBuilder.swift
has two caches forBuildSettings
, for xcconfigs and settings presets. The caches ensure existing files aren't redundantly reloaded, but for non-existent files they don't cache the fact that no settings file could be found, which means redundant searches for any optional settings file that does not happen to exist. Each failed search is repeated work. For the project I'm working on, this is most expensive inSettingsPresetFile.getBuildSettings()
.This change makes these caches also cache which config files do not exist. For just
getBuildSettings()
, this change reduces the memory use, down to 1.7mb, from a little over 10mb. The sample project has ~40 targets but real world targets for us will be bigger.This change adds an
Optional
equivalent enum namedCached
. This is to avoid having a dictionary value of anOptional
type, otherwise the subscript operator would return anOptional<Optional<T>>
, which can be awkward to work with.