Search Issue Tracker
By Design
Votes
2
Found in
2018.3.0b8
2018.3.0f2
2019.1.0a1
2019.2.0a1
Issue ID
1123117
Regression
No
[.NET 4.x] "StringBuilder" generates more garbage in .NET 4.x than in .NET 3.5
Reproduction steps:
1. Open "StringBuilderGC.zip" project
2. Open Profiler window and enable "Deep Profile"
3. Enter Play mode
4. At the first frame search for "Test.Start()"
5. Notice the "GC Alloc" is '4.6 KB' and '2.2 KB'
6. Repeat steps 2-5 with .NET 3.5
7. Notice the "GC Alloc" is '3.6 KB' and '1.1 KB'
Expected Result: .NET 4.x generates less Garbage than .NET 3.5
Actual Result: .NET 4.x generates twice the amount of Garbage compared to .NET 3.5
Reproduced with: 2019.2.0a4, 2019.1.0b2, 2018.3.5f1
Did not reproduce on: 2017.4.20f1
-
Gladyon
Feb 17, 2019 17:53
I understand that it is coming from the Microsoft implementation of 'StringBuilder' which is used now (before it was Mono's implementation).
So I agree that it is 'by design', but does it have to stay like that?
It is possible to implement StringBuilder in another way, in order to reduce GC.After all, Microsoft has designed StringBuilder mostly for 'standard' software, not for games, so it's understandable that they do not have optimized the StringBuilder implementation in order to reduce GC.
But Unity3D is mainly used to create games, and in games reducing GC is very important, so I really think that Unity should have its own implementation of StringBuilder in order to optimize it as it should be for games.
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- UI Overlay Image gets darker on each Camera when multiple Cameras are used
- Assertion failed on expression: 'scriptedImporterClass == SCRIPTING_NULL error when opening the standalone profiler window
- Disabled assets in Import Unity Package window aren't tracked but count as being selected by user
- [Windows] Crash on GetManagerFromContext when video is playing and creating High Definition 3D Projects after FMOD failed to switch back to normal output Error appeared
- GC Alloc produced when adding items to MultiColumnListView with Auto Assign Binding
Resolution Note:
The class library implementation for StringBuilder was changed upstream from mono's own implementation to microsoft's referencesource implementation. This means that the profile of allocations between 3.5's and 4.x's will be different.