The increasing sophistication of modern processors, operating systems, programming languages and design patterns when combined with our unceasing determination to tackle increasingly ambitious problems has led to a greatly increased scope for dissatisfactory performance. Developers must be more vigilante than ever before if they want to satisfy their customer’s expectations with respect to speed, latency and costs.
Performance is a discipline in its own right and my personal belief is that half of the battle lies in just understanding how to measure performance, taking care to apply scientific principles with respect to establishing controlled test conditions and achieving repeatable tests in which the performance tweaks are not smothered by external environmental factors (consider the situation of repeatedly timing some test which is being run on a VM).
Every software developer can become impacted by performance challenges from time to time, paying attention to performance early on in a project, being aware of key factors that influence performance and possessing an arsenal of techniques and tools is becoming increasingly necessary on todays fast paced complex world.
In this section of my blog I’ll be exploring the theme of software performance in general and performamce when working with C# and native code including the kinds of issues that arise with asynchronous or concurrent designs on multicore hardware. In my own career much of my work has entailed paying special attention to performance and I’ve found that lateral thinking often plays an important role.
By thinking out of the box, avoiding unsound assumptions and embracing an open minded inventive mindset one can often make seemingly surprising advances in the face of what can appear to be intractable and unyielding.
This is the attitude I adopted when striving to reduce the serialization costs burdening the development of a high performance managed network server framework, and it was by never saying “never” that I was able to craft and package a radically different serialization technology which outperforms protocol buffers by a factor of almost ten!
So, seriously – never say “never”.