Performancetest für Paketsystem

Dieses Thema im Forum "Offtopic" wurde erstellt von Thalion, 17. Mai 2015.

?

ArrayList oder HashMap schneller?

  1. ArrayLIst

    1 Stimme(n)
    100,0%
  2. HashMap

    0 Stimme(n)
    0,0%
  1. Thalion
    Offline

    Thalion

    Registriert seit:
    22. Juli 2014
    Beiträge:
    25
    Ort:
    Berlin
    Minecraft:
    Spartaner_v1
    Hallo allerseits,
    da ich zur Zeit an einem Netzwerkdienst schreibe, probiere ich zur Zeit die beste Möglichkeit für die Validation zu finden, wobei ich Massen an Paketen zwischenspeichern muss. Um Hierbei zu einer geeignete Lösung zu kommen, und das über mehrere CPU bzw. PC-Systeme herauszufinden würde ich euch bitten einmal einen kleinen Test du machen.

    Eine Zip mit einer Jar und einer run.bat ist hier vorhanden. Diese solltet ihr euch einmal herunterladen, entpacken und die run.bat ausführen.
    Ich würde euch bitten folgende Zahlen einzugeben:
    256 | 2048 | 8192 | 32000

    ( Hierbei geht es darum, welche Zahl am kleinsten ist, also am wenigsten Zeit benötigt. )

    Anschließend könnt ihr das überwiegende Ergebnis in der Umfrage darstellen.
    Ich hoffe auf eure mitarbeit.

    Mfg,
    Thalion

    Edit by Dean: Keine Viren gefunden | Virustotal.com
    Update: Keine Viren | Virustotal.com
     

    Anhänge:

    #1
  2. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    655
    Ohne den Quellcode gesehen zu haben und ohne überhaupt verstanden zu haben was du tust kann ich dir jetzt schon sagen, dass du etwas falsch machst, denn eine ArrayList und eine HashMap sind komplett verschiedene Datenstrukturen. Das eine Arbeitet mit Keys und Values und das andere speichert einfach nur Objekte.

    Davon abgesehen gibts zu den verschiedenen Datenstrukturen im Internet MASSIV Text. Um zu wissen was am schnellsten ist, musst du wissen wie du die Daten ablegen willst und wie du darauf zugreifst und dann ist die Entscheidung auch nicht mehr von zufälligen Tests abhängig sondern es lässt sich relativ klar sagen welche Datenstruktur am besten geeignet ist.

    Wenn du von Netzwerkpaketen redest: Das sind eigentlich erstmal nur Bytes und da kann man z.B. größere ByteBuffer verwenden, die die Daten zwischenhalten. Wenn du es allerdings gleich richtig machen willst verwendest du eine Library, die für performante Netzwerkanwendungen entwickelt wurde: http://netty.io/

    Wenn ich mich korrekt erinnere hattest du vor einiger Zeit auch ein Problem mit dem Asynchronen Netzwerkzeugs von Java. Daher mein Tipp: Verwend einfach Netty. Das nimmt dir die ganze Arbeit ab und ist dabei verdammt schnell und effektiv. Sofern du nicht bereits mehrjährige Erfahrung mit Netzwerkanwendungen unter Java hast wirst du auf keinen Fall etwas schöneres oder schnelleres als Netty implementieren können. Alles andere ist maximal schön um ein bisschen rumzuspielen aber an Netty kommt das alles nicht ran.
     
    #2
  3. Thalion
    Offline

    Thalion

    Registriert seit:
    22. Juli 2014
    Beiträge:
    25
    Ort:
    Berlin
    Minecraft:
    Spartaner_v1
    Mir ist sehr wohl bewusst, dass ArrayList und HashMap unterschiedliche Datenstrukturen sind. Dein Punkt mit netty ist auch nett gemeint, jedoch möchte ich das selbst mit der standardmäßigen NIO-API auf die Beine stellen und mir nicht irgendwelche API's implementieren.
    Zurück zum Punkt der verschiedenen Datenstrukturen. Ich habe auf mehreren PC-Systemen testen lassen und der Unterschied könnte kaum größer sein in Abhängigkeit von Menge der Elemente bzw. auch den PC-Systemen, weshalb ich gern in diesem Bezug eine Statistik hätte.

    Auch performancemäßig gibt es viel im Netz, jedoch kann man sich auch ein bisschen selbstarbeit machen und auch mal etwas selbst erarbeiten.
    Desweiteren würde ein ByteBuffer für mich nicht in Frage kommen, da ich zwar ganze Buffer mit Paketen fülle, jedoch es ewig dauern würde bei 32 Buffern mit a 8192 Byte alles zu iterieren um eine ValidationID zu finden ( explizit beim Server wobei sich die Menge um n*(32*8192) verhalten würde ).

    Mfg,
    Thalion
     
    #3
  4. Inkemann
    Offline

    Inkemann

    Registriert seit:
    3. Mai 2015
    Beiträge:
    341
    Ort:
    Aachen
    Minecraft:
    Inkemann
    Was ist mit LinkedList? Ist besser zu iterieren als ArrayList.
     
    #4
  5. Thalion
    Offline

    Thalion

    Registriert seit:
    22. Juli 2014
    Beiträge:
    25
    Ort:
    Berlin
    Minecraft:
    Spartaner_v1
    Ok danke Inkemann,
    habe ich nicht dran gedacht und werde den Test aktualisieren.

    Mfg,
    Thalion
     
    #5