Following a mini-thread earlier in the chat with @sebl and @tonfilm about how to efficiently convert or copy collections from a type to another (Spread / SpreadBuilder / MutableArray / MutableArraySegments) I started to compile the most common recipes and tricks into this patch, laid out as a double-entry array.
Some operations might be basic but a good reference for beginners who struggle understanding/converting the different collection types, but there are a few of the hot nodes for block copying a subset of value into another collection efficiently, or converting a collection into another type without copying, etc.
I might update the patch as I do further benchmarking between methods to compare performance when I stumble upon one of these scenarios.
Feel free to correct me if you find any mistakes/irrelevances, or to add on if you have other tips and tricks for all patcher levels!
The results are pretty consistent with the internal works I had understood:
FromSequence creates a whole new copy => extremely slow
Buffer exposes the internal array, but it might have allocated more resource than needed, so you might be manipulating more data than necesary => better but not optimal
AsArray resizes the internal array to what is actually used so you get just what ya need => best
Edit to the patch: took out “ToArray” from the MutableArrayBuilder > MutableArray options in my table as it actually returns MutableArray
another funny observation can happen if you wait some time and then run it again, or when you run it the first time
Yes I noticed the same! After you leave it alone for some time indeed.
I am suspecting something gets disposed / recreated after a while indeed? But this goes beyond my knowledge.
Here is another patch update, where I added quite a bit of benchies 🤓
Especially for array-to-array copies. Spoiler: by very far, the fastest way is MutableArray > BlockCopy (or CopyTo) > MutableArray, as @tonfilm was suggesting indeed.
Any other types or node for copy is either worse… or way worse.
Super instructive day!
Thanks again @sebl for the contribution to this quest.
EDIT: patch reuploaded, BlockCopy was missing the count input
EDIT2: even more benchies added for conversions