2016-07-19 6 views
-1
HashMap<String, Object> merchantDetailMap = new HashMap<String, Object>();  
      if(dataAndSize != null) 
      { 
       ResultList<VoltMerchantDetail> tempMerchantList = (ResultList<VoltMerchantDetail>) dataAndSize.get("VoltDBDataList"); 
       vMerchantList = (List<VoltMerchantDetail>) tempMerchantList; 
       for(VoltMerchantDetail vMerchant : vMerchantList){ 
        HashMap<String, Object> merchantDetails = new HashMap<String, Object>(); 
        merchantDetails.put("toActorMsisdn", vMerchant.getToActorMsisdn()); 
        merchantDetails.put("fromActorMsisdn", vMerchant.getFromActorMsisdn()); 
        merchantDetails.put("customCol1", vMerchant.getCustomCol1()); 
        merchantDetails.put("customCol2", vMerchant.getCustomCol2()); 
        merchantDetails.put("customCol3", vMerchant.getCustomCol3()); 
        merchantDetails.put("customCol4", vMerchant.getCustomCol4()); 
        merchantDetails.put("customCol5", vMerchant.getCustomCol5());    
        merchantDetailMap.put(vMerchant.getMerUsername(),merchantDetails); 
       } 

Wert von Schlüssel (vMerchant.getMerUsername()) nehmen ist wie = paPzG+jjzRss4s1frqGKrA==Puting Daten in HashMap ist zu viel Zeit

Problem einiger Zeit ist es zu viel Zeit in Anspruch nimmt (10 - 15 Minuten zu Elementen in sie zu setzen) oder sogar hängt während des Putts.

was Problem sein kann

+0

Wie viele Elemente? – Holger

+0

Warum unten abstimmen? Bitte geben Sie Grund. –

+1

Das Setzen von Werten in eine Hash-Map ist in der Regel sehr schnell - vorausgesetzt, eine schnelle 'hashCode'-Methode. Ihr Code-Snippet zeigt einige Aufrufe, die einige Daten abrufen. Vielleicht sind das die zeitaufwendigen Aktionen? – Seelenvirtuose

Antwort

3

Ich empfehle, dass Sie einen Java-Profiler, um zu sehen verwenden, was die ganze Zeit nimmt.

Für mich ist es nicht plausibel, dass das Erstellen von ~ 20 hashmaps mit 7 Einträgen und das Hinzufügen zu einem anderen hashmap 10 bis 15 Minuten dauert. Das eigentliche Problem ist eher etwas anderes; zum Beispiel:

  • die Abfrage, die die resultList nimmt eine lange Zeit schafft,
  • die resultList viele weitere Einträge, die Sie denken, oder
  • der Haufen ist fast voll, und der GC hat, ist wiederholt in einem letzten Grabenversuch, um Raum zurückzugewinnen.

Für was es wert ist, wenn man die merchantDetails mit einer einfachen Java-Klasse mit 7 benannte Felder und 7 Getter und/oder Setter, dann wird der Ladevorgang schneller wäre die HashMap verwendet zur Darstellung ersetzt, und die geladene Karte würde weniger Speicher benötigen.