Avatar billede datajesper Nybegynder
19. maj 2003 - 14:39 Der er 3 kommentarer og
1 løsning

optimering af variable placering i while-løkker?

er der nogen forskel på hastighed/lager forbrug på følgende kode:

String key = null;
while(......)
{
key = (String)entry.getKey();
....
....
}

Og så denne:

while(......)
{
String key = (String)entry.getKey();
....
....
}

altså om "String" står inde i Wile eller udenfor den ..??
Avatar billede arne_v Ekspert
19. maj 2003 - 14:45 #1
Principielt må den første vel være en lille smule hurtigere.

Men det betyder ikke noget i praksis.

Create af referance er en hurtig operation (create af objekt er
en dyr operation, men det er der ikke tale om her).
Avatar billede arne_v Ekspert
19. maj 2003 - 14:56 #2
Her er et lille test eksempel:

public class Create {
    private final static int N = 1000000000;
    public static void main(String[] args) {
        test1();
        test2();
    }
    private static void test1() {
        String s1 = "Dette er en test";
        String s2 = null;
        long t = System.currentTimeMillis();
        for(int i = 0; i < N; i++) {
            s2 = s1;
        }
        System.out.println("1: " + (System.currentTimeMillis() - t));
    }
    private static void test2() {
        String s1 = "Dette er en test";
        long t = System.currentTimeMillis();
        for(int i = 0; i < N; i++) {
            String s2 = s1;
        }
        System.out.println("2: " + (System.currentTimeMillis() - t));
    }
}

på min 750 MHz maksine med SUN JVM 1.4.1 giver det 4.1 s og 5.5 s -
d.v.s. at man ved den første sparer 1.4 s på en milliard gennemløb.
Avatar billede arne_v Ekspert
19. maj 2003 - 14:58 #3
Det tror jeg ikke betyder noget i de fleste realistiske problem-stillinger.

NB: Du er opmærksom på forskellen mellem de 2 eksempler i at i den første
    er variablen stadig i scope efter løkken.
Avatar billede disky Nybegynder
19. maj 2003 - 15:01 #4
I denne situation gør det ikke så meget forskel, men f.eks. i situationer som denne kan det betyder noget:

while(x<objekt.metode())
{
}

istedet for

int y=objekt.metode();
while(x<y)
{
}

Balladen her er tiden det taget at udføre metode kaldet.

Dog skal man selvfølgelig tage hensyn til om metoden i hele while forløbet returnerer samme værdi.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester