I en java applikation er der konstrukturet to forskellige data type implementationer, for at håndtere data fra en radar. Data har formatet 240x240 felter og 15 lag som ligesom i en lagkage ligger ovenpå hinanden. Den ene data type er et multidimentional grid af bytes (bytes[][][] grid = new byte[15][240][240]). Og den anden er et HashMap med et Point object som key og et TreeMap som value object med de 15 lag for et felt. Ved en test med 100.000 forespørglser med data i alle felterne, outperformer HashMapet klart vores Array...??? HashMap, 30 millisekunder med Array, 650ms... Det er stik i mod forventningerne???. Dog skal det siges at vores læsning ikke prøver at gøre brug af Row Order Major'ing, selv om array'et har denne struktur. Hvoffor er HashMappet så hurtig???
Java compileren optimerer og det giver nogen gange uforudsete effekter.
Her tror jeg det handler om at i i jeres program kikker på eet punkt i alle 15 lag før i går videre til det næste punkt. prøv at definere arrayet som byte[][][] grid = new byte[240][240][15]; // dybde flyttet til bagerste index og se om ikke det gør en gevaldig forskel. (fordi compileren nu kan optimere ved at 'huske' x,y indeks udregningen og så bare lægge 0..14 til for dybden
Noget andet der evt kunne speede arrayet op er at bruge størrelser der er 2^?. fx: byte[][][] grid = new byte[256][256][16]; // 256 == 2^8; 16 = 2^4
mvh JakobA
Synes godt om
Ny brugerNybegynder
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.