Red de conocimiento informático - Material del sitio web - Cómo mejorar la puntuación de Douban

Cómo mejorar la puntuación de Douban

1. Usamos BeanUtil, pero BeanUtil tiene serios problemas de rendimiento.

2. Métodos estúpidos de obtención/configuración manual, lo más probable es que el código sea muy detallado e ilegible.

BeanCopier es parte del paquete API cglib.

Prueba de comparación de rendimiento de BeanCopier/BeanUtil. El rendimiento de BeanCopier es aproximadamente 450 veces mayor que el de BeanUtil.

Copia de BeanCopier = BeanCopier.create(Bean.class, Bean2.class, false

Fuente de Bean = new Bean()

Destino de Bean2 =); new Bean2();

long t = System.currentTimeMillis();

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

copiar .copy(source, target, null);

}

System.out.println(System.currentTimeMillis() - t); La construcción de BeanCopier consume mucho rendimiento, por lo que al realizar operaciones complejas, es mejor almacenar en caché los objetos ahora. De lo contrario, es probable que se produzcan los mismos problemas de rendimiento. Es mejor abandonar los dos métodos de copia que mencioné y utilizar el método BeanCopier proporcionado por CGLIB. Su rendimiento es de 10W COPIA en menos de 50ms. Este rendimiento es muy alto. El método BeanCopier.copy (fuente, destino, Convertir) puede proporcionar su propio procesamiento de atributos independiente. Para saber cómo usarlo, consulte la ayuda de cglib.

Este es un escenario de alta concurrencia con requisitos de alto rendimiento. Si su sistema no está bajo mucha presión, debe usar BeanUtil.

// En esta prueba, la clase Bean/Bean2 utilizó alrededor de 40 objetos de atributos. Hay muchos tipos.

//Código de prueba

importar java.lang.reflect.InvocationTargetException

importar org.apache.commons.beanutils.

importar net.sf.cglib.beans.BeanCopier;

clase pública CGLibTest {

public static void main(String[] args) {

copia de BeanCopier = BeanCopier.create(Bean.class, Bean2.class, false);

Bean fuente = new Bean()

Bean2 destino = new Bean2(); p> long t = System.

System.out.println( System.currentTimeMillis() - t

Bean source2 = new Bean(); > intente {

BeanUtils.copyProperties(fuente2, destino);

BeanUtils.copyProperties(fuente2, destino

} captura (IllegalAccessException e1) {

// TODO genera automáticamente un bloque de captura

e1.printStackTrace();

} catch (InvocationTargetException e1) {

// TODO Generar automáticamente el bloque de captura

e1.printStackTrace();

}

t = System.currentTimeMillis()

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

intentar {

BeanUtils.copyProperties(fuente2, destino

} captura (IllegalAccessException e) {

// TODO Bloque catch generado automáticamente

e.printStackTrace()

} catch (InvocationTargetException e) {

// TODO bloque de captura generado automáticamente

e.printStackTrace();

}

}

System.out. .currentTimeMillis() - t

}

}

}