在JIT / AOT编译期间,CIL ldstr是否被替换为对string.Intern的常量引用?

时间:2015-12-20 17:32:49

标签: c# string cil il

假设我有一个需要优化的代码,但同时又易于调试。 因此,我会为我使用的每个值分配一个字符串。 该字符串是否会造成重大性能损失,或者它是否在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的“实现细节”,但如果以这种方式进行优化,那将是有意义的。

0 个答案:

没有答案