我遇到了一些與Hibernate有關的性能問題,而且我卡住了。在循環中創建對象
我有一個嵌套的foreach,首先遍歷一張地圖,然後通過地圖中的每個鍵來創建一個對象。
for(Map<String, Object> csvRow : csvRows){
Contact contact = new Contact();
contact.setContactId(nextContactId);
for(String key : csvRow.keySet())
{
contact.setDetails(key, csvRow.get(key));
contactList.addContact(contact);
}
nextContactId++;
}
我的問題出現在上面的代碼大概需要10秒鐘才能運行。這是一個大約2MB的CSV輸入,但該服務必須有效地處理200MB(至少)的文件。 我被卡住的原因是下面的代碼在大約1.6秒內運行,但只創建一個Contact對象的單個實例(這是公平的),我明白爲什麼會發生這種情況。
Contact contact = new Contact();
for(Map<String, Object> csvRow : csvRows){
contact.setContactId(nextContactId);
for(String key : csvRow.keySet())
{
contact.setDetails(key, csvRow.get(key));
contactList.addContact(contact);
}
nextContactId++;
}
我已經試過了平常的事情像處理一個關鍵的每次迭代中對象的ID手動設置爲null。爲了使事情更清楚,聯繫對象不應該代表一個完整的人,而是代表聯繫人的一條信息。每個聯繫人將具有相同的contactId,並且我有一個包裝器對象將它們聯繫在一起,但這與我的問題無關。
我的問題是這樣的:我如何保持後者的性能,同時仍然創建我需要的所有對象。此外,我需要保留我所擁有的對象結構,因爲我無法控制可能缺失數據左右中心的源CSV,因此我使用的對象結構。如果您需要更多信息,我非常期待您的回覆。
編輯#1:使用休眠4.2.8,彈簧3.2.6