假设我有一个需要优化的代码,但同时又易于调试。
因此,我会为我使用的每个值分配一个字符串。
该字符串是否会造成重大性能损失,或者它是否在JIT
/ AOT
编译期间转换为从string.Intern获取的常量引用,从而转换为单个简单指令?
示例:
在IL中,它将是ldstr "gazilion lines"
。
是否在JIT / AOT编译过程中变成ldsflda string.InternCache.ID_0000647516166
之类的东西
和const string ID_0000647516166 = "gazilion lines";
已添加到string.InternCache
?
是的,我理论上可以查看https://github.com/mono/mono,但我不知道如何找到它。
是的,我正在混合使用CIL,C#和编译的CIL,但是你明白了。
ldstr
保证是O(1)
吗?
是的,它是CLR的“实现细节”,但如果以这种方式进行优化,那将是有意义的。