From e47d11017af9eff6581591d5d73c1e55676b0955 Mon Sep 17 00:00:00 2001 From: 啊鑫 <t2856754968@163.com> Date: 星期四, 05 六月 2025 09:16:24 +0800 Subject: [PATCH] 优化执行内存 --- src/main/java/com/gs/xky/service/PurchaseService.java | 35 +++++++++++++++++++++++++++++++++-- 1 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gs/xky/service/PurchaseService.java b/src/main/java/com/gs/xky/service/PurchaseService.java index 5598796..32ed2f1 100644 --- a/src/main/java/com/gs/xky/service/PurchaseService.java +++ b/src/main/java/com/gs/xky/service/PurchaseService.java @@ -79,8 +79,35 @@ log.info("銆恠yncPurchaseOrderDetails銆戣幏鍙栧埌{}鏉¢噰璐鍗曟暟鎹�", orderDetails.size()); - // 澶勭悊閲囪喘璁㈠崟鏄庣粏鏁版嵁 - orderDetails.forEach(detail -> { + // 鍒嗘壒澶勭悊鏁版嵁锛屽噺灏戝唴瀛樺崰鐢� + int batchSize = 100; // 姣忔壒澶勭悊100鏉℃暟鎹� + int totalSize = orderDetails.size(); + int batchCount = (totalSize + batchSize - 1) / batchSize; // 鍚戜笂鍙栨暣璁$畻鎵规鏁� + + for (int i = 0; i < batchCount; i++) { + int fromIndex = i * batchSize; + int toIndex = Math.min((i + 1) * batchSize, totalSize); + + log.info("銆恠yncPurchaseOrderDetails銆戝鐞嗙{}鎵规暟鎹紝鑼冨洿锛歿}-{}", i + 1, fromIndex, toIndex); + + // 鑾峰彇褰撳墠鎵规鐨勬暟鎹� + List<PurchaseOrderDetail> batchDetails = orderDetails.subList(fromIndex, toIndex); + + // 澶勭悊褰撳墠鎵规鐨勬暟鎹� + processBatch(batchDetails); + + // 鎵嬪姩瑙﹀彂GC锛岄噴鏀惧唴瀛橈紙璋ㄦ厧浣跨敤锛屼粎鍦ㄥ唴瀛樼揣寮犳椂鑰冭檻锛� + // System.gc(); + } + } + + /** + * 鎵归噺澶勭悊閲囪喘璁㈠崟鏄庣粏鏁版嵁 + * + * @param batchDetails 褰撳墠鎵规鐨勯噰璐鍗曟槑缁嗘暟鎹� + */ + private void processBatch(List<PurchaseOrderDetail> batchDetails) { + batchDetails.forEach(detail -> { try { // 鏍规嵁鏈夋晥鏍囧織鍜岃鍗曠姸鎬佸鐞嗕笉鍚岀殑涓氬姟閫昏緫 if (detail.getValidFlag() != null && detail.getValidFlag() == 0) { @@ -113,6 +140,10 @@ // 淇濆瓨SRM閲囪喘璁㈠崟鏄庣粏 savePurchaseOrderDetail(detail); + + // 甯姪GC鍥炴敹涓嶅啀浣跨敤鐨勫璞� + wrapper = null; + erpData = null; } catch (Exception e) { log.error("銆恠yncPurchaseOrderDetails 澶勭悊寮傚父銆戣鍗曞彿: {}, 椤规: {}, 寮傚父: {}", detail.getPoErpNo(), detail.getLineNo(), e.getMessage(), e); -- Gitblit v1.9.3