From 1698b51d19f6301eb41261e8839a87be36b88b59 Mon Sep 17 00:00:00 2001 From: yiming Date: Wed, 12 Nov 2025 17:20:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=84=AA=E5=8C=96=20transfer=5FregisterControl?= =?UTF-8?q?ler.cs=20=E4=B8=AD=E7=9A=84=20AsEnumerable=20=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 問題: 之前將某些 AsEnumerable() 改為 ToList() 可能導致數據過載 優化: 1. GetFollowerOrders (Line 420) - 改回 AsEnumerable() - 原因:雖然有 f_num 限制,但信眾可能有大量訂單 - AsEnumerable() 確保數據庫查詢先執行,只在需要內存計算時才轉換 2. GetActivityFollowers (Line 1057) - 改回 AsEnumerable() - 原因:activity_num 限制可能包含大量訂單(數千條) - AsEnumerable() 避免將所有數據載入內存 保持不變: - Line 240:follower 查詢的 ToList() 保持不變 原因:Where(f.num == x.f_num) 限制為單一記錄 需要在內存中執行解密操作 技術原則: - AsEnumerable() 應該在「數據庫查詢完成後、內存計算前」使用 - ToList() 只在「確定數據量小」或「必須立即執行」時使用 - 解密等無法在數據庫執行的操作必須在內存中進行 --- web/App_Code/api/transfer_registerController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/App_Code/api/transfer_registerController.cs b/web/App_Code/api/transfer_registerController.cs index bb4deab..3c17bd8 100644 --- a/web/App_Code/api/transfer_registerController.cs +++ b/web/App_Code/api/transfer_registerController.cs @@ -417,7 +417,7 @@ public class transfer_registerController : ApiController d.demo, reg_time = o.reg_time // 報名日期 })) - .ToList() + .AsEnumerable() // 只在需要內存計算前轉換 .Select(x => new { x.order_no, x.activity_num, @@ -1054,7 +1054,7 @@ public class transfer_registerController : ApiController d.price, paid = d.pro_order_record.Select(r => r.price).DefaultIfEmpty(0).Sum() })) - .ToList() + .AsEnumerable() // 只在需要內存計算前轉換 .Select(x => new { x.f_num, x.follower_name,