Description
There are a few opportunities to avoid metrics overhead.
First when setting state in the context, we allocate a new one for the stored value, per element. This generates a fair amount of objects for the garbage collector too. If we retain and re-use contexts within a bundle, we would have the opportunity to save on these costs.
Also, it's possible that we have overhead on the metric updating paths. We can possibly do better than the general sync.Map, and avoid the type assertion cost for extracting values of known types from the maps.