2012-01-08 8 views
0

サーバーから360Kのデータを受け取り、携帯電話でXMLファイルに変換します。最終ファイルは約1.3Mbです。その後、私はこのファイルを読み込もうとしています。私のGT-S5660では、このプロセスは5時間(!)時間実行されます。正しい結果が得られますが、このプロセスを最適化する方法があるのだろうかと思います。私はそれのiPhone版を持っている、そしてプロセスは5秒未満で完了する。 これは正常な動作ですか?もしそうなら、SQLIteが代わりになりますか?他の要素の回収のたくさんのことで5時間XMLを取得する

FileInputStream fileos; 
    try { 
     fileos = openFileInput("TarifsCache" + Constants.VERSION + ".txt"); 
    } catch (FileNotFoundException e) { 
     return; 
    } 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db; 
    try { 
     db = dbf.newDocumentBuilder(); 
    } catch (ParserConfigurationException e) { 
     return; 
    } 
    Document doc; 
    try { 
     doc = db.parse(new InputSource(fileos)); 
    } catch (SAXException e) { 
     return; 
    } catch (IOException e) { 
     return; 
    } 
    doc.getDocumentElement().normalize(); 

    for (int i = 0;; i++) { 

     NodeList nodeList = doc.getElementsByTagName("Cache" + i); 

     Node node = nodeList.item(0); 
     if (node == null) 
      break; 
     Element fstElmnt = (Element) node; 

     NodeList nameList = fstElmnt.getElementsByTagName("area_ref"); 
     Element nameElement = (Element) nameList.item(0); 
     nameList = nameElement.getChildNodes(); 
     tarifread.area_ref = Integer.parseInt(((Node) nameList.item(0)) 
       .getNodeValue()); 

を追っ: はここに私のコードです。

+1

コードをプロファイルし、どの部分が最も長くかかるかを確認する必要があります。 http://developer.android.com/guide/developing/debugging/debugging-tracing.html – inazaruk

+0

を参照してください。 db.parse(...)は単独で5分間実行されます。正規化には25秒かかります。最初のdoc.getElementsByTagName( "Cache" + i)は1分かかります。問題の原因となる単一のコマンドラインはありません – michaelsmith

+0

このフォーラムには誰もいません。 – michaelsmith

答えて

0


SAXのようなアドバンスパーサーパーサーを使用し、アンドロイドでサポートされていないSTAXを使用してください。

関連する問題