Why is there a BSTR cache anyway?

Raymond Chen

The Sys­Alloc­String function uses a cache of BSTRs which can mess up your performance tracing. There is a switch for disabling it for debugging purposes, but why does the cache exist at all?

The BSTR cache is a historical artifact. When BSTRs were originally introduced, performance tracing showed that a significant chunk of time was spent merely allocating and freeing memory in the heap manager. Using a cache reduced the heap allocation overhead significantly.

In the intervening years, um, decades, the performance of the heap manager has improved to the point where the cache isn’t necessary any more. But the Sys­Alloc­String people can’t get rid of the BSTR because so many applications unwittingly rely on it.

The BSTR cache is now a compatibility constraint.

0 comments

Discussion is closed.

Feedback usabilla icon