十年C#老开发告诉你使用List需要注意的坑
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
给大家分享几个经典的 C# 中关于List使用的坑,有些是我踩过的,有些是我见过的,大家共勉。 第一个坑,不设 Capacity。 List 底层说白了就是个数组,满了就扩容,扩容是新建一个两倍大的数组再把旧的拷过去。 数据少的时候无感,上百万条的时候,每扩容一次就是一次大数组拷贝,旧数组丢给 GC,二代 GC 一触发,主线程卡得欲仙欲死,让你怀疑人生。 能预估数量就老老实实 第二个坑,以为 Clear () 能释放内存。 这个我老早的时候这么写,后来才有研究,一开始只是为了实现功能,没有深入了解。
真想释放,就直接 第三个坑,也是最致命的 —— 全量加载。 很多人写 LINQ 顺手就 但你要了解,IEnumerable 是延迟执行的,ToList 一调用,所有数据瞬间物化到内存里。 千万级数据这么干,OOM 是迟早的事。 正确做法是分批读,一批几千条,处理完就丢,内存永远稳得住。 只遍历不随机访问的话,根本不需要 List,IEnumerable 或者 总结下,说句实在话List 本身没问题,它就是个动态数组,设计定位就是中小规模、需要随机索引的场景。出问题的从来都是拿它干不该干的事。 大数据量的最优解,从来不是把 List 优化得多好,而是 ——别一次性把所有数据塞进内存。 这话听起来像废话,但真到了赶项目、图省事的时候,能忍住不写那行 我现在写代码,用到List或者ToList 就会多问自己一句:这数据大概多少条?真的需要全部加载吗? 阅读原文:点击这里 该文章在 2026/9/4 10:12:31 编辑过 |
关键字查询
相关文章
正在查询... |