反射+Set測試
使用的類:org.springframework.beans.BeanUtils
代碼
@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) | Set耗時(ms) |
---|---|---|
10 | 506 | 0 |
100 | 487 | 1 |
1000 | 458 | 0 |
2000 | 493 | 0 |
4000 | 573 | 2 |
8000 | 541 | 3 |
10000 | 553 | 6 |
結論
Set方法的耗時明顯少於反射處理的耗時。
在上述數據集的結果中可以看出,這種反射的處理,耗時還是非常明顯的,即使在數據量很少的情況下,這種處理方式代碼無疑顯得很整齊簡潔,但是效率太低,不提倡
。另外,BeanUtils的拷貝,寫的簡潔,導致其實在執行完之後,我們不能很明顯的知道究竟多少屬性被拷貝了。
不可一味的爲了追求代碼的簡潔,忽略了性能的問題。往往比較嚴重的性能問題都是由這種小問題堆積而來的。
防微杜漸。