The only example driven by tooling was the implicit double StringBuilder one. We found that with allocation tracker and measured the difference after the fix.
For all the others, the wins are obvious but hard to measure. Doing something once rather than 5 or list.size() times will always be better. I prefer to look at it as a win on byte codes executed, jumps necessary, and memory lookups reduced rather than with hard numbers. Can you reason about what a 100ns improvement does to your code? I can't, but I can apply the cached-count for loop pattern and know that it adds up to non-zero in the long run. It's enough for me, at least.