The Synchronisation Trap

The original generation of PDAs, the ancestors of today’s mobile devices, were notably limited in their connectivity. They relied on a regular, often daily, ritual of synchronisation where they would be connected to a desktop machine by a wire and synchronise their data. Mobile devices are changing the way applications are designed in some fundamental … Read more

Are Unit Tests Overused?

Unit Testing has come to dominate the many types of test that are used in developing applications. This has inevitably been at the expense of other types, such as integration test. Does a successful unit test regime ensure quality, or should we see unit testing as just one of a range of tests that can together give us confidence in an application?… Read more

ANTS Performance Profiler 6 Early Access

The Early Access Program for ANTS Performance Profiler 6 has begun. You can get the new version from the EAP forum, here. There are three major new features in this early build, with more to come in the future: Sampling This new profiling mode is available from the session setup dialog. Sampling works by periodically … Read more

Understanding Garbage Collection in .NET

Once you understand how .NET's garbage collector works, then the reasons for some of the more mysterious problems that can hit a .NET application become much clearer. NET may have promised the end to explicit memory management, but it is still necessary to profile the usage of memory when you're developing .NET applications if you wish to avoid memory-related errors and some performance issues.… Read more


I write a lot of comments in my code: these days it’s second nature. Every declaration I write has a comment describing what it’s for and maybe some remarks describing things I think are the associated gotchas. Inside method definitions, I maintain a running commentary describing what the method is supposed to be doing and … Read more

When to Run and When to Block

When you are developing a multi-threaded application, you will need to understand how the operating system decides which threads are to be blocked, and which should run. Performance comes from running the optimum number of threads at all times, getting the maximum benefit from the computers processing resources. … Read more

The Dangers of the Large Object Heap

You'd have thought that memory leaks were a thing of the past now that we use .NET. True, but we can still hit problems. We can, for example, prevent memory from being recycled if we inadvertently hold references to objects that we are no longer using. However, there is another serious memory problem in .NET that can happen out of the blue, especially if you are using large object arrays. Andrew Hunter explains... … Read more