Handling billions of exceptions with .NET & Raygun.io

Sign in to queue

Description

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:

Tag:

.NET

Day:

2

Embed

Download

Download this episode

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

The Discussion

  • User profile image
    nadjibus

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

  • User profile image
    traskjd

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

  • User profile image
    rschu

    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
    traskjd

    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.

    Thanks!

  • User profile image
    SleepyDaddy​Software

    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
    rschu

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

Add Your 2 Cents