3

假设您在一个类中有 10 个不同的位置,其中字符串“Abc123”是硬编码的。我知道无论如何用常量替换所有这些是个好主意。我想知道的是,这样做是否会加快程序的执行速度。不久前我听说它在 AS3 中是这样做的,尽管我什至不确定。

另外,如果用静态定义的常量替换等效的字符串文字可以提高性能,提高多少?在大多数过程/面向对象的语言中,这是否会大致相同?但我主要是想知道它是否确实提高了性能。谢谢!

4

2 回答 2

4

没什么区别。编译器已经收集了具有相同值的相同字符串文字并将它们转换为单个对象。这是一种非常常见的编译器优化,称为“字符串实习”,使用字典很容易实现,vb.net 编译器也实现了它。

您可以通过使用 ildasm.exe 查看您的程序集来亲自了解这一点。使用 View + Show Token Values 可以看到字符串编号。例如,这段代码:

Sub Main()
    Dim s1 = "hello"
    Dim s2 = "hello"
End Sub

生成:

  IL_0001:  ldstr      "hello" /* 70000001 */
  IL_0006:  stloc.0
  IL_0007:  ldstr      "hello" /* 70000001 */
  IL_000c:  stloc.1

请注意令牌值 70000001 是如何相同的。

于 2013-03-18T19:59:15.813 回答
1

同意汉斯·帕桑特的观点。但我只想补充一点,使用常量会让你的代码在未来更容易维护。

于 2013-03-18T20:16:29.810 回答