[swift-users] Help! Slicing an array is very expensive

Dave Abrahams dabrahams at apple.com
Tue May 16 18:18:46 CDT 2017


on Mon May 08 2017, Rick Mann <swift-users-AT-swift.org> wrote:

> I have this C library that interacts with some hardware over the
> network that produces a ton of data. It tells me up front the maximum
> size the data might be so I can allocate a buffer for it, then does a
> bunch of network requests downloading that data into the buffer, then
> tells me when it's done and what the final, smaller size is.
>
> Thanks to previous discussions on the list, I settled on using a
> [UInt8] as the buffer, because it let me avoid various
> .withUnsafePointer{} calls (I need the unsafe buffer pointer to live
> outside the scope of the closures). Unfortunately, When I go to shrink
> the buffer to its final size with:
>
>     self.dataBuffer = Array(self.dataBuffer![0 ..< finalBufferSize])
>
> This ends up taking over 2 minutes to complete (on an iPad Pro). finalBufferSize is very large, 240
> MB, but I think it's doing a very naive copy.

This shouldn't be expensive.  Please file an issue with a reproducer at
http://bugs.swift.org and we'll look into it.

> I've since worked around this problem, but is there any way to improve on this?
>
> Thanks,

-- 
-Dave



More information about the swift-users mailing list