This week we continue with iterators to get the functionality of IEnumerable
without the nasty garbage creation. This week the little iterator library gets support for sorting and binary searching. Read on for the details!
Posts Tagged GC
Back from a brief break, we pick up this week by finishing up the “modifying sequence operations” with some gems like RandomShuffle
and go through the “partitions” category with functions like Partition
and IsPartitioned
. These are all solid algorithms with a lot of potential uses, so read on to see how to use them with iterators and for the source code that implements them!
Continuing the series this week we’ll delve into the iterator functions that modify the sequence. This includes handy tools like Copy
, SwapRanges
, and Transform
. Of course this is all done without creating any garbage! Read on to see how and for the full source code.
Last week’s article introduced the concept of iterators as an alternative to the GC-heavy IEnumerable
. Today’s article expands the iterator library to include a bunch of more functions to make it useful. Think of these like the extension functions in System.Linq
: Any
, IndexOf
, etc. These have all been tailored to iterators and none of them will create any garbage whatsoever.
In C#, just about everything is an IEnumerable
. Since LINQ syntax, foreach
loops, and the System.Linq
namespace are all designed to work with IEnumerable
, you’ve got lots of tools to use. Unfortunately, the core of IEnumerable
is the GetEnumerator
function which usually creates garbage and eventually causes memory fragmentation and GC framerate spikes. Do we simply stop using all of these nice tools? Normally the answer is “yes”, but today’s article shows you another way.
Last time we saw that calling a non-default constructor on a generic struct (MyStruct<T>
) causes garbage creation. That garbage creation is subtle, but can have big impacts on framerate and memory usage. Today we’ll see two more ways that structs can create garbage and hopefully avoid some pitfalls. Read on to find out how!
As Unity programmers, the garbage collector is sadly our enemy. C# struct
s are often a great tool to avoid allocating objects that need to later be garbage-collected. This isn’t always the case though. Sometimes even a struct
can allocate garbage. Today’s article points out one of those ways so you won’t be fooled into thinking you’ve stopped the GC just because you’re using a struct
. Read on to learn more!
As we know, foreach loops create garbage when used with a List<T>
. This happens the first time you iterate over one and it happens every time thereafter. A comment on that article shared a link to a class called FastList
that was written expressly to solve the GC issue. Does it? How does its performance compare to plain old List
? Today’s article puts it to the test to find out!
One typical piece of advice for dealing with the slowness of Unity’s garbage collector is to periodically force a garbage collection, such as every 30 frames. Even Unity advises this. The idea is that you’ll spread out the garbage collection work across many frames rather than having a big spike that causes your frame rate to stutter. But the question remains- what’s the best rate to force the GC? Today’s article tries out various intervals to see which is best. Read on for the results!
It’s easy to forget about struct
in C#. After all, it’s not available in other languages like Java or AS3 and it seems to have fewer features than good old class
. But struct
can really help you out when it comes to garbage creation! Today’s article discusses some strategies to get the most out of struct
. Read on to learn how to use structs to put a stop to that pesky garbage collector!