Why is there a BSTR cache anyway?
SysAllocString 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?
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
SysAllocString people can’t get rid of the
BSTR because so many applications unwittingly rely on it.
BSTR cache is now a compatibility constraint.