2012-03-28 3 views
0

두 파일을 병합하기 위해 Saxon Java 라이브러리를 사용하고 있습니다. XSLT 파일은 here에 있습니다.Saxon 라이브러리를 사용하는 동안 높은 CPU 사용량

두 개의 작은 xml 파일 (각각 ~ 15 개의 노드)이 있더라도 Saxon이 파일을 병합 할 때 CPU 사용량이 급증합니다. 나는 또한 Saxon을 사용하여 작은 XML 파일 (~ 15 노드)의 다른 유스 케이스 - 속성을 수정하려고 시도했으며 같은 결과를 발견했다.

일반적으로 XSLT는 CPU 집약적 인 작업을 처리합니까? 또는 Saxon의 알려진 행동입니까?

답변

3

올리버 베커 (Oliver Becker)의 병합 스타일 시트에는 O (n^2) 성능이 있다고 생각합니다. 즉, 입력 크기를 두 배로 늘리면 네 번 걸립니다. 이는 XSLT의 일반적인 속성이 아닙니다. Oliver가 사용하는 알고리즘의 속성입니다. 이 코드는 XSLT 2.0의 deep-equal() 함수를 사용하여 훨씬 효율적으로 (여전히 2 차적으로) 만들 수 있지만 이보다 훨씬 과격한 정밀 검사는 다른 알고리즘의 설계가 필요합니다. 예 : 사전 2 개의 트리가 동등한 지의 후속 테스트가 2 개의 해시 코드의 비교로 감소되도록 각 노드에 대한 해시 코드를 계산하는 두 트리를 통과합니다.

1

IMHO XSLT는 CPU를 많이 사용하지만 작은 파일의 경우에는 간략해야합니다.

작은 파일을 변환하는 데 걸리는 시간을 확인하는 간단한 벤치 마크를 작성하는 것이 좋습니다. 적어도 10,000x 변환을 수행하여 JVM이 예열되었는지 확인하고 예열 후 2 초 이상 반복해서 수행하는 데 걸리는 시간을 테스트하십시오.

관련 문제