2014-11-19 3 views
0

내 프로그램의 실행 시간이 너무 긴 이유를 이해하려고합니다. 내 프로그램의 목적은 CSV 데이터를 가져와 한 줄씩 확인하는 것입니다.LocalValidatorFactoryBean을 사용하여 성능 문제가 발생했습니다.

내 실행 시간의 90 %가 데이터의 유효성 검사에 소비 된 것으로 보입니다. 이 내 검증 기능입니다 :

public static <T> HashSet<ConstraintViolation<T>> validate(Validator validator, T resource, Class<?>... groups) { 
    return (HashSet<ConstraintViolation<T>>) validator.validate(resource, groups); 
} 

그리고 내가 사용하는 검증은 다음과 같이 봄에 수입 LocalValidatorFactoryBean입니다 :

<bean id="validator" name="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 

내가 유효성 검사가 모든 반복에 더 많은 시간을 할애 한 것으로 나타났습니다. 예를 들어, 내 CSV 파일에 비슷한 줄이 1000 인 경우 첫 번째는 ~ 55ms에 유효하며, ~ 900ms에 마지막으로 유효성이 검사됩니다.

이 비선형 실행 시간을 설명하는 방법과이를 개선하는 방법을 알지 못합니다. 어떤 실수를 했습니까? 콩을 다르게 설정해야합니까? 다른 유효성 검사기 (어느 것을 사용해야합니까?)? 당신의 시간 :

+0

귀하는 유효성 확인을하고 계십니다. 'T 리소스 '란 무엇인가요? 오랜 시간이 걸리는 검증입니까? JPA를 사용하는 경우 유효성 검사가 수행 된 것일 수도 있습니다 (yuor 1 차 캐시의 엔티티 수와 함께 증가 할 수도 있음). –

+0

데이터의 유효성을 검사합니다. 예를 들어 첫 번째 열이 숫자인지 확인하고 두 번째 문자는 5에서 255 자 사이의 문자열이며 다른 규칙을 따릅니다. (CVS 파일은 처리해야하는 데이터에 대해 쉽게 100 개의 열을 가질 수 있습니다. , 각 열은 1-5 개의 규칙을 가질 수 있습니다). 그건 그렇고, 내 검증 기능이 거의 모든 시간 (~ 90 %) 소요됩니다 확신합니다. 그리고 예, JPA Hibernate를 사용하고 있습니다. –

+0

물론, 하이버 네이트가 언급 한 바와 같이 밸리데이션 로직을 점검한다. 또한 밸류 에이지도 유효성 검사를 사용한다. 그래서 만약 당신이 믹싱에 대해서도 유효하지 않다면, 중복 체크가되어 버리고 변경이 발생하면 더러운 체크를위한 퍼포먼스가 나온다. 이것은 첫 번째 레벨 캐시에 추가 된 각 객체에 대해 상당히 선형 적으로 증가합니다. 하지만 현재는 코드, 설정 등을 보지 않고도 알기가 어렵습니다. –

답변

0

에 대한

덕분에 당신이 LinkedList를 사용하지 않는? 많은 열이 있고 필드에 대한 액세스가 행을 캐시하지 않는다고 가정하면 증가하는 시간을 설명 할 수 있습니다.

시간이 변경되면 no-op로 유효성 검사를 바꾸어보십시오. 또는 단순히 호출로 디버그 (또는 스택 추적을보고 보도록 함)하여 어떤 재미있는 일이 발생하는지 확인할 수 있습니다.

관련 문제