반사 속성 복사 와 Set 방법 성능 비교

8745 단어 코드이상 조사
반사+세트 테스트
사용 하 는 클래스:org.springframework.beans.BeanUtils.copyProperties(source, target)코드
@Test
public void test() {
    PriceAdjustBean adjustBean = new PriceAdjustBean();
    adjustBean.setSkuId(111111);
    adjustBean.setOrderId("ST2019070112064948900018");
    adjustBean.setAdjustedPrice(100000L);
    adjustBean.setAdjustedType(1);

    long now = System.currentTimeMillis();
    int count = 10000;
    System.out.println("    :" + count);
    for (int i = 0; i < count; i++) {
        OrderPriceAdjustment orderPriceAdjustment = new OrderPriceAdjustment();
        BeanUtils.copyProperties(adjustBean, orderPriceAdjustment);
    }
    long after = System.currentTimeMillis();
    System.out.println("    :" + (after - now));
    for (int i = 0; i < count; i++) {
        OrderPriceAdjustment orderPriceAdjustment = new OrderPriceAdjustment();
        orderPriceAdjustment.setOrderId(adjustBean.getOrderId());
        orderPriceAdjustment.setSkuId(adjustBean.getSkuId());
        orderPriceAdjustment.setAdjustedType(adjustBean.getAdjustedType());
        orderPriceAdjustment.setAdjustedPrice(adjustBean.getAdjustedPrice());
    }
    long result = System.currentTimeMillis();
    System.out.println("set   :" + (result - after));
}

결실
순환 횟수
반사 시간 소모(ms)
시간 설정(ms)
1
491
0
10
506
0
100
487
1
1000
458
0
2000
493
0
4000
573
2
8000
541
3
10000
553
6
100000
916
19
1000000
1993
22
현재 데 이 터 는 한 번 에 실 행 된 결과 일 뿐 이 고 이 방법 은 바 텀 에서 다른 특수 처 리 를 하여 서비스 가 시 작 된 후에 하나의 속성 복사 로 시간 이 상대 적 으로 낮 게 유지 된다.자세 한 내용 은CachedIntrospectionResults류 참조.
결론.
Set 방법의 소모 시간 은 반사 처리 의 소모 시간 보다 현저히 적다.
상기 데이터 세트 의 결과 에서 알 수 있 듯 이 이런 반사 적 인 처 리 는 시간 소모 가 매우 뚜렷 하 다.데이터 양 이 적은 상황 에서 도 이런 처리 방식 코드 는 매우 정연 하고 간결 해 보이 지만.또한 빈 유 틸 리 스 의 복사 본 은 간결 하 게 써 서 실 행 된 후에 우 리 는 얼마나 많은 속성 이 복사 되 었 는 지 뚜렷하게 알 수 없다.
코드 의 간결 함 을 추구 하기 위해 성능 문 제 를 소홀히 해 서 는 안 된다.흔히 비교적 심각 한 성능 문 제 는 이런 작은 문제 가 쌓 여 작은 문 제 를 방지 하 는 것 이다.
물론 존재 에는 반드시 일정한 의미 가 있다.일부 프레임 워 크 구조 에서 통용 되 는 코드 는 이런 방식 을 피 할 수 없 을 것 이다.

좋은 웹페이지 즐겨찾기