The
SysAllocString
function
uses a cache of BSTR
s
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 BSTR
s 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.
The BSTR
cache is now a compatibility constraint.