Say I have a code that needs to be optimized but easy to debug at the same time.
I would thus assign a string to every value I use.
Does the string inflict a major performance hit or is it turned into a constant reference obtained from string.Intern during JIT
/AOT
compilation, thus turning into a single simple instruction ?
Example:
In IL it would be ldstr "gazilion lines"
.
Is it during JIT/AOT compilation turned into something like ldsflda string.InternCache.ID_0000647516166
and const string ID_0000647516166 = "gazilion lines";
is added to string.InternCache
?
Yes, I could theoretically look into https://github.com/mono/mono but I have no idea how to find it.
Yes, I am mixing CIL, C# and whatever CIL is compiled into, but you get the idea.
Is ldstr
guaranteed to be O(1)
?
Yes it's "implementation detail" of the CLR but it would make sense if it was optimized this way.
Long answer: yes. Becomes a single MOV reg,imm instruction at runtime, be sure to use a debugger that can show you the disassembly so you don't have to fret about how the metadata token and the jitter works. – Hans Passant
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With