alamb commented on code in PR #7015: URL: https://github.com/apache/arrow-rs/pull/7015#discussion_r1992264897
########## arrow-json/src/writer/encoder.rs: ########## @@ -196,9 +236,18 @@ impl Encoder for StructArrayEncoder<'_> { let mut is_first = true; // Nulls can only be dropped in explicit mode let drop_nulls = (self.struct_mode == StructMode::ObjectOnly) && !self.explicit_nulls; - for field_encoder in &mut self.encoders { - let is_null = is_some_and(field_encoder.nulls.as_ref(), |n| n.is_null(idx)); - if drop_nulls && is_null { + + // Collect all the field nulls buffers up front to avoid dynamic dispatch in the loop + // This creates a temporary Vec, but avoids repeated virtual calls which should be a net win Review Comment: Let's just rn ```shell cargo bench --bench json_writer ``` And see what the numbers say? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org