3

文字列「Abc123」がハードコーディングされているクラスに10個の異なるスポットがあるとします。とにかく、それらすべてを定数に置き換えるのは良い考えだと私は知っています。私が疑問に思っているのは、そうすることでプログラムの実行がスピードアップするかどうかということです。しばらく前に、AS3でそうなっていると聞きましたが、それについてはよくわかりません。

さらに、同等の文字列リテラルを静的に定義された定数に置き換えると、パフォーマンスがどの程度向上しますか?これは、ほとんどの手続き型/オブジェクト指向言語でほぼ同じになるのでしょうか?しかし、私はほとんどの場合、それがパフォーマンスをまったく向上させるかどうか疑問に思っています。ありがとう!

4

2 に答える 2

4

違いはありません。コンパイラは、同じ値を持つ同一の文字列リテラルをすでに収集し、それらを単一のオブジェクトに変換します。これは「文字列インターン」と呼ばれる非常に一般的なコンパイラの最適化であり、辞書を使用して簡単に実装できます。vb.netコンパイラもこれを実装します。

ildasm.exeを使用してアセンブリを確認すると、これを自分で確認できます。文字列番号を確認できるように、[表示]+[トークン値の表示]を使用します。たとえば、次のコードは次のとおりです。

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 に答える