SORU
28 EKİM 2008, Salı


Bir döngü içinde bir StringBuilder yeniden kullanmak için daha iyi mi?

Performans ile ilgili bir soru StringBuilder kullanımı ile ilgili oldum. Çok uzun bir döngü içinde StringBuilder bir işleme ve bir daha böyle bir yönteme geçiyorum:

for (loop condition) {
    StringBuilder sb = new StringBuilder();
    sb.append("some string");
    . . .
    sb.append(anotherString);
    . . .
    passToMethod(sb.toString());
}

Her loop döngüsü StringBuilder iyi bir çözümdür başlatmasını? Ve bir silmek yerine daha iyi bir arama aşağıdaki gibi mi?

StringBuilder sb = new StringBuilder();
for (loop condition) {
    sb.delete(0, sb.length);
    sb.append("some string");
    . . .
    sb.append(anotherString);
    . . .
    passToMethod(sb.toString());
}

CEVAP
28 EKİM 2008, Salı


İkincisi 25% hakkında mini-kriter benim daha hızlı.

public class ScratchPad {

    static String a;

    public static void main( String[] args ) throws Exception {
        long time = System.currentTimeMillis();
        for( int i = 0; i < 10000000; i   ) {
            StringBuilder sb = new StringBuilder();
            sb.append( "someString" );
            sb.append( "someString2" i );
            sb.append( "someStrin4g" i );
            sb.append( "someStr5ing" i );
            sb.append( "someSt7ring" i );
            a = sb.toString();
        }
        System.out.println( System.currentTimeMillis()-time );
        time = System.currentTimeMillis();
        StringBuilder sb = new StringBuilder();
        for( int i = 0; i < 10000000; i   ) {
            sb.delete( 0, sb.length() );
            sb.append( "someString" );
            sb.append( "someString2" i );
            sb.append( "someStrin4g" i );
            sb.append( "someStr5ing" i );
            sb.append( "someSt7ring" i );
            a = sb.toString();
        }
        System.out.println( System.currentTimeMillis()-time );
    }
}

Sonuçlar:

25265
17969

Bu TOTEM 1.6.0_07 sahip olduğunu unutmayın.


Bu Jon Skeet fikirlerini temel alan düzenleme, burada sürüm 2. Aynı sonuçları olsa da.

public class ScratchPad {

    static String a;

    public static void main( String[] args ) throws Exception {
        long time = System.currentTimeMillis();
        StringBuilder sb = new StringBuilder();
        for( int i = 0; i < 10000000; i   ) {
            sb.delete( 0, sb.length() );
            sb.append( "someString" );
            sb.append( "someString2" );
            sb.append( "someStrin4g" );
            sb.append( "someStr5ing" );
            sb.append( "someSt7ring" );
            a = sb.toString();
        }
        System.out.println( System.currentTimeMillis()-time );
        time = System.currentTimeMillis();
        for( int i = 0; i < 10000000; i   ) {
            StringBuilder sb2 = new StringBuilder();
            sb2.append( "someString" );
            sb2.append( "someString2" );
            sb2.append( "someStrin4g" );
            sb2.append( "someStr5ing" );
            sb2.append( "someSt7ring" );
            a = sb2.toString();
        }
        System.out.println( System.currentTimeMillis()-time );
    }
}

Sonuçlar:

5016
7516

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BlackBoxTV

    BlackBoxTV

    7 Mayıs 2007
  • Break

    Break

    10 Aralık 2005
  • Photoshop Pro Help

    Photoshop Pr

    1 Ocak 2007