maxburke commented on code in PR #9016:
URL: https://github.com/apache/arrow-rs/pull/9016#discussion_r2635984476
##########
arrow-array/src/array/byte_view_array.rs:
##########
@@ -885,8 +896,11 @@ impl<T: ByteViewType + ?Sized> Array for
GenericByteViewArray<T> {
fn shrink_to_fit(&mut self) {
self.views.shrink_to_fit();
- self.buffers.iter_mut().for_each(|b| b.shrink_to_fit());
- self.buffers.shrink_to_fit();
+
+ if let Some(buffers) = Arc::get_mut(&mut self.buffers) {
Review Comment:
So the issue I have with `Arc::make_mut` is that if I slice array I now have
two references to the underlying buffers.
If I call `shrink_to_fit` on one of them, `Arc::make_mut` will clone the
buffers and then `shrink_to_fit` will be called on one of them. But because the
underlying buffers end up being cloned, it doesn't make the original allocation
shrink and in the end it'll end up using more memory, until the other reference
is dropped.
Additionally it'll create more allocator pressure because the buffer cloning
will duplicate the buffer at it's pre-shrunken size before it's shrunk.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]