2017-08-24 58 views
-1

我正在嘗試使用IBM的JSR352實現來開發Java批處理程序。由於批處理作業涉及反覆處理大量記錄,因此我選擇將其作爲塊處理作業來執行。問題描述通過here詳細定義。通過Reader反覆打開文件會導致JSR352中的性能問題?

參考IBM提供的BonusUpdate示例,他們似乎在閱讀器的processItem()方法中爲讀取器類讀取的每個'N'個記錄打開和關閉文件。

這不會導致性能問題嗎?我們不能讓文件在上次讀取之前保持打開狀態嗎?

+0

[你的分析器告訴你什麼?](https://stackoverflow.com/questions/890222/analyzing-code-for-efficiency) –

+0

[爲什麼我們不支持\ [你最喜歡的公司] ](https://meta.stackoverflow.com/questions/255745/why-were-not-customer-support-for-your-favorite-company) –

回答

1

GeneratedCSVReader的readItem()方法不會每次都打開文件。它在批容器調用open()時被打開。
BonusCreditProcessor中的processItem方法不會執行任何文件訪問。

+0

看着讀者的開放方式的邏輯,他們似乎在記憶中一個行號和打開期間,他們似乎將光標移動到該行號。如果每次都不調用Open,那麼readItem()方法如何讀取下一行? – yathirigan

+1

readItem()在第54行遞增recordNumber。在檢查點調用checkPointInfo()方法並返回當前recordNumber值。在作業重啓時,檢查點數據被提供給open(),它將本地recordNumber設置爲上一個完成檢查點的正確值。在作業的初始提交時,沒有檢查點數據,因此第61行的測試跳過了設置記錄編號,我們從初始值0開始。 – DFollis

+0

謝謝。是否有任何文檔可用於解釋BonusPayout示例的這種功能?即使通過代碼,我仍然有一些疑問。特別是在聽衆。 – yathirigan

相關問題