2010-07-20 5 views
3

동일한 보고서를 네 번 연속 생성하려고 할 때 내보고 응용 프로그램의 프로파일을 만들었습니다. 첫 번째 것은 1859ms를 가졌지 만 다음의 것들은 400과 600ms 사이에 걸렸습니다. 그 이유는 무엇입니까? 어떻게 든 내 응용 프로그램을 더 빨리 만들 수 있을까요? 보고 모듈이 서버에서 실행되고 사용자가 "보고서 인쇄"를 클릭 할 때까지 기다립니다.jasperreports의 속도 향상

답변

3

이후의 보고서 실행은 메모리를 확장하고 다양한 캐시를 채 웁니다.

귀하의 앱을 본 적이 없다면 귀하의 데이터베이스 서버가 귀하가 쿼리하는 데이터를 캐시하는 것이 가장 큰 영향을 미칩니다. 데이터를 디스크에서 메모리로로드하고 그 메모리로 수행하는 것이 더 좋지 않은 경우, 거기에 그대로 둡니다. 다음에 쿼리가 오면 데이터베이스는 데이터를 디스크에 저장할 필요가 없으며 여전히 메모리에 있습니다.

이 방법을 사용하는 명백하고 간단한 방법은 사용자가 시스템에서 느슨해지기 전에 하나의 "가짜"쿼리를 실행하는 것입니다. 즉, 1800 밀리 초를 기다리고 사용자가 단 400을 얻는다는 뜻입니다. 불행히도 모든 쿼리가 동일한 경우, 즉 모두가 동일한 보고서를 요청하는 경우에만 작동합니다. 다른 보고서와 다른 데이터가있는 경우 캐시가 다른 데이터에 대해 플러시되고 새 결과를로드하는 데 더 많은 시간이 소요됩니다.

간략히 말하자면 항상 동일한 쿼리를 사용하면 정말 빠른 답변을 줄 수 있지만 전혀 새로운 내용을 제시하지 못합니다.

+0

조언을위한 thx! db하지만 xml-files를 사용하지는 않지만 효과는 같습니다 .. 첫 번째 호출 시간의 대부분은 xpath-query로 이동합니다. 너무 사소한 것처럼 보이기 때문에 이것을 기대하지 않았습니다. – martin

+0

구문 분석 XML은 엄청난 양의 작업입니다! 이 XML은 얼마나 자주 변경됩니까? XML을 DOM으로 구문 분석하고이를 서블릿 세션에 저장하는 수명주기 리스너를 설정할 수 있습니다. 그런 다음 쿼리는 XPath를 실행하지만 파일을 열거 나 구문 분석 할 필요가 없습니다. XML이 간혹 업데이트되는 경우에는 다시 구문 분석을 강제하는 다른 서블릿을 작성할 수 있습니다. –

+0

내 말을 들어주기 전에 : 몇 가지 로깅을하고 어떤 작업이 빨기 시작하는지 확인하십시오. 필자의 조언은 파일 읽기와 XML 파싱의 비용을 다루지 만 다른 곳에서 시간을 보낼 수는 있습니다. –