Several people here (you know who you are) have been nagging me to do an analysis similar to the one I did for allocations but to get an idea of which methods might do locking and how much.  So I repeated my experiment, this time counting any calls to Monitor.Enter in the subtree of any given method.

The results were very surprising, you can see that the bulk of the methods (78%) do no synchronization at all.  However, once you go down the dark path, it gets bad fast.  The synchronization complexity of the biggest is over 10^19.  Remember as with the allocation metric the number is offset by 1 so that 0 -> 0,  1 -> 1,  10->2,  100->3, etc.

Anyone care to guess what class has the methods with the greatest synchronization complexity?

In a coming article I will write a few words about how to interpret these numbers.  Clearly a complexity of 10^19 does not mean that 10^19 synchronizations actually happen when you call the method.