Gordon Weakliem points out that the "conventional wisdom" on optimizing things may not always hold:
it takes around 1,000 concatenations to make StringBuilder.Append() out-perform String::operator+ . Johan's point is that you need to consider the effect of reallocations and GC on performance - it may well be that the classic test to loop through the operations and compare the running time is flawed.
His example is for C#, but the broader lesson holds for any language/library: it's not what you don't know that kills you: it's what you think you know that just isn't so.