2010-07-20 63 views
3

我剛剛介紹了我的報告應用程序,當我試圖連續生成四次相同的報告。第一個花費了1859ms,而後面的花費了400到600ms。 這是什麼解釋?我可以以某種方式使用它來使我的應用程序更快? 報告模塊在服務器上運行並等待用戶點擊「打印報告」。加速jasperreports

回答

3

報告的後續運行擴展了內存並填充了各種緩存。

從未見過您的應用程序,我的猜測將是最大的影響是您的數據庫服務器緩存您查詢的數據。它將數據從磁盤加載到內存中,並且與該內存無關,它將它留在那裏。下一次查詢出現時,數據庫不必爲數據而轉到磁盤,它仍在內存中。

利用這個最明顯和最簡單的方法是在用戶鬆動系統之前運行一個「假」查詢;這意味着你會吸收1800毫秒的等待時間,並且你的用戶可以得到甜蜜的400.不幸的是,這隻有在所有查詢都是相同的情況下才有效,即如果每個人都要求相同的報告。如果有不同的報告和不同的數據,緩存將被刷新以獲取不同的數據,並且需要更多時間來加載新結果。

總之:如果你總是有相同的查詢,你可以給出真正快速的答案,但是你永遠不會呈現任何新的東西。

+0

thx的建議! 我沒有使用數據庫,但xml文件,但效果是相同的。第一次調用的大部分時間去xpath查詢。沒有料到這一點,因爲它看起來很瑣碎。 – martin 2010-07-20 13:25:43

+0

解析XML是一項令人難以置信的工作量!這個XML多久改變一次?您可以設置生命週期偵聽器,將XML解析爲DOM並將其存儲在servlet會話中。然後查詢將運行XPath,但不需要打開或解析該文件。如果偶爾更新XML,則可以編寫另一個強制重新解析的servlet。 – 2010-07-20 17:31:29

+0

在你聽我之前:做一些日誌記錄並找出哪些操作正在吸取時間。我的建議解決了文件讀取和XML解析的成本問題,但可能有時間花在其他地方。 – 2010-07-20 17:32:57