3 ms·
This pattern was also used by Java and .NET for implementing cheap String.substring calls where all substrings would use the same underlying array with just off
by Shoothe 9y ago
This pattern was also used by Java and .NET for implementing cheap String.substring calls where all substrings would use the same underlying array with just offsets changed. Unfortunately it turns out that people read entire files into a one big String and then have a reference to just a small piece of it (via substring) marking the big underlying array as reachable for the GC holding a lot of memory for no reason. That's why new implementations of substring always copy:)
- kbsletten 9y agoI know this was changed recently-ish in Java, but I hadn't heard of anybody doing the old substring trick in .NET, do you know when they cut over?
- kkokosa 9y agoThere is a lot of good things going on in .NET Core about this. Here is a good description of Span: http://adamsitnik.com/Span/#slicing-without-managed-heap-allocations http://adamsitnik.com/Span/#slicing-without-managed-heap-all...
- matthewwarren 9y agoAFAIK this trick was never possible in .NET because Substring always 'deep copied' the relevant data into a completely new string
- kevingadd 9y agoRegex's implementation in the standard library used to do this, and I think maybe still does. Bonus points because they leaked a reference to the last string you ran a regex against (????) so if it was big you'd just eat up 50 mb of heap for a while.