gpt4 book ai didi

c# - 从 C# 中的大型数据结构中释放内存

转载 作者:太空狗 更新时间:2023-10-29 22:20:44 25 4
gpt4 key购买 nike

我有几个SortedList<>SortedDictionary<>我的模拟代码中的结构,随着时间的推移,我在其中添加了数百万个项目。问题是垃圾收集器没有足够快地释放内存,因此对应用程序的性能造成巨大影响。我最后的选择是参与 GC.Collect()方法,以便我可以回收该内存。有没有人有不同的想法?我知道 Flyweight pattern 这是另一种选择,但我很感激其他不需要对我的代码进行大量重构的建议。

最佳答案

您正在与“天下没有免费的午餐”原则作斗争。您不能假设在列表中塞满数百万项不会影响性能。只有 SortedList<> 应该是个问题,它将开始在大对象堆中分配内存。该分配不会很快释放,需要第 2 代收集才能再次从 LOH 中清除内容。此延迟不应以其他方式影响程序的性能。

您可以做的一件事是避免 SortedList<> 不断增长时将其塞入 LOH 的内部数组副本的多个副本。尝试为 Capacity 猜测一个合适的值,以便它预先分配大数组。

接下来,使用 Perfmon.exe 或 TaskMgr.exe 并查看程序的页面错误增量。分配时它应该很忙。如果您看到较低的值(100 或更少),那么您可能遇到页面文件碎片化的问题。运行 XP 的旧机器上的常见祸害。对磁盘进行碎片整理并使用 SysInternals 的 PageDefrag 实用程序可以创造非凡的奇迹。

关于c# - 从 C# 中的大型数据结构中释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3751871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com