Handling billions of exceptions with .NET & Raygun.io

Download this episode

Download Video

Download captions

Download Captions


Raygun.io is a exception and crash recording and alerting platform for every programming language in use today. The underlying technology used to build Raygun is the .NET framework. John-Daniel will be talking about how the team built the platform and how it has processed billions of software exceptions, all in real-time. With a focus on some of the performance aspects of building a system that has peaked at more than 110,000 crash reports per second being received.

For more information, check out this course on Microsoft Virtual Academy:







Available formats for this video:

Actual format may change based on video formats available and browser capability.

    The Discussion

    • User profile image

      Hey John. Great session! you're such a great presenter. I think you'll have a new customer soon :)

    • User profile image

      Thanks for the kind words Nadjibus, glad you enjoyed it. Love to see you using Raygun :)

    • User profile image

      Pretty cool.

      Right now it seems for the Windows stack only .NET is supported but no C++. Do you also have plans to support C++ for Win32 desktop and Windows Apps?

    • User profile image

      Hi Rschu,

      Raygun supports almost every major programming language available today. We have native support for mobile (iOS) and are beta testing native C++ for Win32 with customers at present. If you're keen to try it out, contact the team through our site and they'll get you setup.


    • User profile image

      On the Linq slide, there is a performance comparison with some Linq code vs an imperative loop. But the two snippets are not equivalent. The performance difference is primarily a result of differences in algorithmic complexity, and not on the overhead of Linq. You could write an imperative loop that does a full scan of the dictionary and filters on the key and the performance of the two would be much closer.

      In this case, you could take the imperative code and create a Linq operator and get the same algorithm complexity. You'd be left with only the overhead of creating an IEnumerable and iterating it:


              public static IEnumerable<TValue> Range<TValue>(this IDictionary<int, TValue> self, int start, int end)
                  for (var i = start; i <= end; i++)
                      yield return self[i];
                  var results = (from x in dict.Range(2, 3)
                           where x.Contains("2")
                           select x).ToList();


    • User profile image

      @traskjd:Thanks for the update. I will reach out to your team.

    Comments closed

    Comments have been closed since this content was published more than 30 days ago, but if you'd like to send us feedback you can Contact Us.