Zamrznutie programu pri natiahnutí velkého mnozstva dat – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zamrznutie programu pri natiahnutí velkého mnozstva dat – Java – Fórum – Programujte.comZamrznutie programu pri natiahnutí velkého mnozstva dat – Java – Fórum – Programujte.com

 

vlado09910
Návštěvník
30. 5. 2010   #1
-
0
-

Ahojte
robim program ktory nacita z XML hodnoty a nasledne ich vlozi do JTable. Je to v pohode kym je v xml 30 poloziek.. ale pri 1500 to zaberie 5min. Chcel by som sa spytat:
1) ci je to normalne:-) ale poznate nejaku fintu ako to urychlit (pricom naseldny zapis zmenenych dat do toho isteho xml trva 2 sek.)...
2) ako dat niekam vypisovat na kolkej polozke sa uz nachazda. (toto funguje len na konzole cez System.out.println ale neviem to vypisat na formular.. ani ked dam vytvorit dalsie form. okno aj to je zamrznute = a to som to robil cez vlakna)

PS. to vytiahnutie dat z xml robim nasledovne:
kliknutim na Button sa zavola metoda hodnoty()

String[][] hodnoty = Data.hodnoty();
Object[][] data = new Object[hodnoty.length][4];
for (int i = 0; i < hodnoty.length; i++)
{
data[i][0] = hodnoty[i][0];
data[i][1] = hodnoty[i][1];
data[i][2] = new Boolean(Boolean.parseBoolean(hodnoty[i][3]));
data[i][3] = i;
}
jTable1.setModel(new javax.swing.table.DefaultTableModel(
data,
new String [] {
"Nazov", "Parameter 1", "Vysledok", "ID"
}
)


a metoda hodnoty() v triede Data vyzera nasledovne (public static String[][] hodnoty()):

....... ... XPathExpression expr = xPath.compile("//p[@id]");

Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
System.out.println("Pocet zaznamov: " + nodes.getLength());

data = new String[nodes.getLength()][4];

for (i = 0; i < nodes.getLength(); i++) {
data[i][0] = (String) xPath.evaluate(("//parameter1"), doc, XPathConstants.STRING);
data[i][1] = (String) xPath.evaluate(("//parameter2"), doc, XPathConstants.STRING);
data[i][2] = (String) xPath.evaluate(("//parameter4"), doc, XPathConstants.STRING);
data[i][3] = (String) "" + i;
// policko.add("" + i);
}
return data; .....

Dakujem za pripomienky

Nahlásit jako SPAM
IP: 92.245.193.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
1. 6. 2010   #2
-
0
-

Můžeš zkusit použít něco efektivnějšího než XPath, třeba SAX (http://java.sun.com/j2se/1.4.2/docs/api/org/xml/sax/package-summary.html). Dělá se to tak, že si vytvoříš svojí implementaci třídy org.xml.sax.helpers.DefaultHandler, kde přepíšeš metody aby zpracovali tvoje XML.
Zamrzá ti to, protože to nejspíš voláš ze stejného vlákna.

Nahlásit jako SPAM
IP: 86.61.140.–
KIIV
~ Moderátor
+43
God of flame
1. 6. 2010   #3
-
0
-

a ta extremni rychlost muze byt i tim, ze mas getLength() uvnitr for cyklu..
a pokud to jeste parser prochazi pokazde znova, tak uz sou to nasobky exponencialni slozitosti (ne li mocniny)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vlado09910
Návštěvník
2. 6. 2010   #4
-
0
-

to: KIIV: vytiahnut getLength pred cyklus do premennej nepomohlo.. nemalo to na to vplyv (ale vyzeral to ako dobry napad) dik
to Anonym: to ze to bezi v tom istom vlakne je pravda a je to aj dovod preco to mrzlo a ten napad so SAXom je super, tam to cele trvalo 4 sek. :-) Akurat sa mi to este nepodarilo zakomponocvat do mojho riesenia (neviem ako z vnutornej triedy DefaultHandler dHandler = new DefaultHandler(){... konstruktory...} vytiahnut to pole data (dari sa mi ho uspensne naplnat tymi hodnotami z xml ale nechce mi to vratit tie hodnoty aby som s nimi vedel pracovat.. Ak mozte, tak mi s tym este helfnite, aspon nacrtnite riesenie... Diik :smile14:

Nahlásit jako SPAM
IP: 62.168.64.–
KIIV
~ Moderátor
+43
God of flame
2. 6. 2010   #5
-
0
-

To vlado0991 : tak hod to velky xml.. zkusim jak dlouho to potrva v perlu :D

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vlado09910
Návštěvník
2. 6. 2010   #6
-
0
-

To KIIV : To je zbytocne posielat.. je jasne ze to robim zle ked to tak dlho trva. Pozrite sa na ten kod a skuste mi napisat ako viem dostat von mimo dHandler to pole data[][]... subor je funkcny , parsuje spravne xml ale za ten svet z tade tie data v poli nedostanem:-)

DIIIIK

Nahlásit jako SPAM
IP: 62.168.64.–
KIIV
~ Moderátor
+43
God of flame
2. 6. 2010   #7
-
0
-

To vlado0991 :
kazdopadne xml::simple v perlu soubor o 20000 polozkach do datove struktury za 0,7s pokud byl tvar <item a="..." b="..." c="..." d="..." />
a 3.6s pokud byl tvar:
<item><a>...</a><b>...</b><c>...</c><d>...</d></item>
...

proste zvaz jestli to nebude rychlejsi zpracovavat sam :D

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
2. 6. 2010   #8
-
0
-

Buď si tu proměnnou do který to ukládáš musíš nadeklarovat už v metodě main, nebo si vytvoř novou třídu, která je potomkem DefaultHandler a v tý definuj getData. Pokud si tu proměnou deklaruješ v main, tak musí být final (např. final String[][] data ...).

Nahlásit jako SPAM
IP: 86.49.59.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
2. 6. 2010   #9
-
0
-

to KIIV:
To že to je v perlu rychlejší je jasný. Perl je optimalizovaný na práci s textem. Viděl jsem i nějaká porovnání myslím že s javou 1.4, kde práce se stringy byla v perlu asi 10x rychlejší. V novějších verzích javy to je o trochu lepší, ale pořád nic moc. V javě nic rychlejšího pro parsování xml než sax není. Navíc ani napsáním vlastního parseru se to o moc nezrychlí. Jediné co může při použití SAX zdržovat je režie volání těch funkcí, jinak je to shodné s čtením textu po znacích.

Nahlásit jako SPAM
IP: 86.49.59.–
vlado09910
Návštěvník
2. 6. 2010   #10
-
0
-

To Anonymní uživatel : SUPER !!!! vyriesene... isiel som na to cez vytiahnutie data ako final na zaciatok metody... tam som sa dostal sice predtym aj sam, ale "zlakol" som sa toho ked mi vypisalo ze to musi byt final. Nevyskusal som tu moznost.. Ale teraz max. spokojnost :-) Dakujem

Nahlásit jako SPAM
IP: 92.245.193.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
3. 6. 2010   #11
-
0
-

final to musí být abys zajistil, že se nezmění instance objektu přiřazeného do proměnné. Třeba těžko říct jak by se měl chovat následující kód:



String[] data = new String[10];
InnerClass ic = new InnerClass() {
public void do() {
for(int i = 0; i < data.length; i ++) {
data[i] = ...
}
}
}
data = new String[5];
ic.do(); //zapisovat do původního objektu (new String[10]) nebo do nově vytvořeného(new String[5])?

Nahlásit jako SPAM
IP: 86.61.140.–
vlado09910
Návštěvník
16. 6. 2010   #12
-
0
-

Sorry ze to otvaram este, ale nasiel som aj rychle riesenie cez XPath... 40.000 zaznamov za 4 sek.. do pola data[][]
org.w3c.dom.NodeList parametre1 = (org.w3c.dom.NodeList) xPath
.evaluate(co, doc, javax.xml.xpath.XPathConstants.NODESET);
a nasledne cez cyklus:
for (int i = 0; i < pocetParametrov1; i++)
data[i][0] = parametre1.item(i).getTextContent();

40.000 zaznamov ale malo problem s pamatou:-) To som nasledne upravil zaznamom vo VM -Xms512m a fachčí to:-)

Nahlásit jako SPAM
IP: 62.168.64.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 18 hostů

Podobná vlákna

Uložení dat programu. — založil Luckaa

Pomoc při vkládání dat — založil TenglerDaniel

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý