猿问

将字符串标记为循环体内的常量

我有一些带有循环的代码:


while(someVariable)

{

    string url = "https://<domain>/<page>/etc..";

    var response = await _httpHandler.GetAsync(url);

    // do something ...

}

我想阻止编译器在每次循环迭代时创建新的字符串对象。最好的方法是什么 - 将 url 移到循环之外,或者简单地将 is 标记为 const?(两者之间有区别吗?)


GCT1015
浏览 108回答 2
2回答

Cats萌萌

不用担心。!编译器不会创建新的引用,因为字符串池。字符串内部池是一个表,其中包含对应用程序中以编程方式声明或创建的每个唯一文字字符串的单个引用。公共语言运行时 (CLR) 使用实习池来最大限度地减少字符串存储需求。因此,具有特定值的文字字符串实例在系统中仅存在一次。

DIEA

最简单的方法是将字符串移到循环之外。如果编译器在启用优化时自动执行此操作,我不会感到惊讶。无论哪种方式,字符串都会被放入字符串池中并重新使用。
随时随地看视频慕课网APP
我要回答