C#怎么清空Dictionary字典_C#如何管理内存集合【基础】

张开发
2026/4/16 21:14:18 15 分钟阅读

分享文章

C#怎么清空Dictionary字典_C#如何管理内存集合【基础】
Clear()是最安全的清空方式只释放元素引用、重置计数器而不改变容量反复new会增加GC压力遍历时不可调用Clear()多线程需加锁或改用ConcurrentDictionary。Clear() 是最安全的清空方式别用 new 重建直接调用 Clear() 方法即可清空所有键值对内部只释放元素引用、重置计数器不改变哈希表容量。反复用 new DictionaryTKey, TValue() 替换旧字典不仅多一次内存分配还会让原字典对象滞留等待 GC——尤其在高频循环中容易触发 Gen0 频繁回收。适用场景需要保留字典实例比如作为类字段被多处引用注意如果字典里存的是大对象引用如 byte[]、ListstringClear() 后这些对象若无其他引用会立刻可被回收错误现象用 dict new Dictionaryint, string(); 后发现其他地方还在读老字典数据“没清掉”——其实是引用没更新Clear() 不释放底层数组容量不变Clear() 只把 _count 设为 0但底层数组_buckets、_entries仍保留原大小。这对后续快速重填有利但如果清空后长期不再写入或字典曾膨胀到很大比如百万级就浪费内存。判断是否要重建观察字典峰值大小与常态大小差距是否超过 5–10 倍重建写法dict new DictionaryTKey, TValue(dict.Capacity);显式传入合理容量避免立即扩容兼容性注意.NET 6 的 Dictionary 支持构造时指定初始容量.NET 5- 不支持传 0 容量最小为 1遍历中不能调用 Clear()会抛 InvalidOperationException和大多数 .NET 集合一样Dictionary 在迭代过程中禁止结构修改。哪怕只是 Clear()也会触发“集合已被修改”的异常错误信息是System.InvalidOperationException: Collection was modified; enumeration operation may not execute. Cleanup.pictures 智能移除图片中的物体、文本、污迹、人物或任何不想要的东西

更多文章