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 performance
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!
Today’s article takes a break from the iterator series to investigate an interesting anomaly with the List.ForEach
function: it’s surprisingly fast! So fast that it’s actually competitive with regular old for
, foreach
, and while
functions. How can it be so fast when it has to call a delegate that you pass it for every single loop iteration? Read on for to find out!
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!
Today’s article expands on the previous loop test article to find out which kind of loop is truly fastest. Read on to find out!
Sometimes a tiny amount of code costs a huge amount of performance. This is especially true of built-in language features, which many programmers assume to be extremely cheap if not free. Today we’ll look at if
and see just how much performance it can cost your app. Read on to see!
While little utilized, C#’s struct
type can come in really handy sometimes. Today’s article shows how to use it to get a lot more mileage out of modern CPUs’ caches to really boost your app’s performance. Read on for some quick tips!