2010-09-02 5 views
4

Я чувствовал, что скорость загрузки xstream не соответствует моему требованию, когда я пытаюсь выполнить загрузку из файла XML. Для «база данных» с записями 10k ++ потребуется несколько минут.Оптимизация скорости загрузки xstream

Ниже приведена вся структура данных, которую я использую для сериализации. Размер списка (символы и коды) будет примерно 10k ++ записей.

http://jstock.cvs.sourceforge.net/viewvc/jstock/jstock/src/org/yccheok/jstock/engine/StockCodeAndSymbolDatabase.java?revision=1.11&view=markup

Есть ли подход, который я могу попробовать, чтобы увидеть, будет ли это ускорить мое время загрузки? Способный по-прежнему загружать обратно также сохранен предыдущий сохраненный файл.

Ниже приведен код, используемый для де-сериализации. Благодарю.

@SuppressWarnings("unchecked") 
public static <A> A fromXML(Class c, File file) { 
    XStream xStream = new XStream(new DomDriver("UTF-8")); 
    InputStream inputStream = null; 

    try { 
     inputStream = new java.io.FileInputStream(file); 
     Object object = xStream.fromXML(inputStream); 
     if (c.isInstance(object)) { 
      return (A)object; 
     } 
    } 
    catch (Exception exp) { 
     log.error(null, exp); 
    } 
    finally { 
     if (false == close(inputStream)) { 
     return null; 
     } 
     inputStream = null; 
    } 

    return null; 
} 

ответ

6

Избегайте использования медленного DomDriver.

@SuppressWarnings("unchecked") 
public static <A> A fromXML(Class c, File file) { 
    // Don't ever try to use DomDriver. They are VERY slow. 
    XStream xStream = new XStream(); 
    InputStream inputStream = null; 
    Reader reader = null; 

    try { 
     inputStream = new java.io.FileInputStream(file); 
     reader = new InputStreamReader(inputStream, Charset.forName("UTF-8")); 
     Object object = xStream.fromXML(reader); 

     if (c.isInstance(object)) { 
      return (A)object; 
     } 
    } 
    catch (Exception exp) { 
     log.error(null, exp); 
    } 
    finally { 
     if (false == close(reader)) { 
      return null; 
     } 
     if (false == close(inputStream)) { 
      return null; 
     } 
     reader = null; 
     inputStream = null; 
    } 

    return null; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^