From 9969417bd8b3edd2085334c643e32bbfaa55f7dd Mon Sep 17 00:00:00 2001 From: yiming Date: Wed, 12 Nov 2025 17:30:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=84=AA=E5=8C=96=20FollowerController.cs=20?= =?UTF-8?q?=E7=9A=84=E5=AD=90=E6=9F=A5=E8=A9=A2=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 問題: Line 345 將家族成員 ID 載入內存(ToList) - 如果家族有 100+ 成員,載入 100-400 bytes 優化: 移除 ToList(),改為使用 IQueryable 子查詢 - var ccList = cc.ToList(); // 移除 - 直接使用 cc 進行 Contains 查詢 - 生成 SQL: WHERE num IN (SELECT...) OR leader IN (SELECT...) 效果: ✓ 減少內存占用:100-400 bytes → 0 ✓ 完全在數據庫執行 ✓ SQL 優化器可以更好地優化查詢計劃 對比: - 原始版本(載入內存):2 次查詢 - 優化版本(子查詢):1 次查詢(最佳) --- review_report.txt | 12 ++++++++++++ web/App_Code/api/FollowerController.cs | 7 +++---- 2 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 review_report.txt diff --git a/review_report.txt b/review_report.txt new file mode 100644 index 0000000..0024ea9 --- /dev/null +++ b/review_report.txt @@ -0,0 +1,12 @@ +═══════════════════════════════════════════════════════════════ +🔍 AsEnumerable/AsQueryable/ToList 完整 REVIEW +═══════════════════════════════════════════════════════════════ + +檢查範圍:Batch 1-3 所有已修改文件 +檢查標準: + ✅ 最佳選擇 - 性能和可讀性都最優 + ⚠️ 可優化 - 可以進一步優化 + ❌ 需修正 - 存在明顯問題 + +═══════════════════════════════════════════════════════════════ + diff --git a/web/App_Code/api/FollowerController.cs b/web/App_Code/api/FollowerController.cs index 872eeff..0d841fb 100644 --- a/web/App_Code/api/FollowerController.cs +++ b/web/App_Code/api/FollowerController.cs @@ -340,10 +340,9 @@ public class FollowerController : ApiController //int ccc = cc.Count(); - - - var ccList = cc.ToList(); - var qry = _db.followers.Where(f => ccList.Contains(f.num) || (f.leader.HasValue && ccList.Contains(f.leader.Value))); + // 優化:使用子查詢在數據庫層面執行,避免載入所有家族成員 ID + // 生成 SQL: WHERE num IN (SELECT...) OR leader IN (SELECT...) + var qry = _db.followers.Where(f => cc.Contains(f.num) || (f.leader.HasValue && cc.Contains(f.leader.Value)));