From b996406e8f2eacae07e8e8aaeec3fe8a8605196f Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Thu, 27 Mar 2025 17:53:47 +0000 Subject: [PATCH] Shrink metadata vectors some metadata vectors during YAML parsing For the Skyrim SE masterlist this saved ~ 3 MB of memory, and there was no noticeable impact doing the same for other metadata collection fields. --- src/metadata/message.rs | 4 +++- src/metadata/plugin_metadata.rs | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/metadata/message.rs b/src/metadata/message.rs index 55d424d5..ea176358 100644 --- a/src/metadata/message.rs +++ b/src/metadata/message.rs @@ -263,7 +263,7 @@ pub(crate) fn parse_message_contents_yaml( key: &'static str, parent_yaml_type: YamlObjectType, ) -> Result, ParseMetadataError> { - let contents = match &value.data { + let mut contents = match &value.data { YamlData::String(s) => { vec![MessageContent::new(s.clone())] } @@ -281,6 +281,8 @@ pub(crate) fn parse_message_contents_yaml( } }; + contents.shrink_to_fit(); + if validate_message_contents(&contents).is_err() { Err(ParseMetadataError::new( value.span.start, diff --git a/src/metadata/plugin_metadata.rs b/src/metadata/plugin_metadata.rs index 880f4b04..38316265 100644 --- a/src/metadata/plugin_metadata.rs +++ b/src/metadata/plugin_metadata.rs @@ -377,10 +377,14 @@ fn get_vec<'a, T: TryFrom<&'a MarkedYaml, Error = impl Into> hash: &'a saphyr::AnnotatedHash, key: &'static str, ) -> Result, ParseMetadataError> { - get_as_slice(hash, key, YamlObjectType::PluginMetadata)? + let mut vec = get_as_slice(hash, key, YamlObjectType::PluginMetadata)? .iter() .map(|e| T::try_from(e).map_err(Into::into)) - .collect::, _>>() + .collect::, _>>()?; + + vec.shrink_to_fit(); + + Ok(vec) } impl EmitYaml for PluginMetadata {