gpt4 book ai didi

c# - 无法在PowerShell 3.0和2.0中取消分配内存

转载 作者:行者123 更新时间:2023-12-03 01:18:22 25 4
gpt4 key购买 nike

不久前,我用C#写了一个简单的完整TCP连接扫描程序,并将其编译为DLL。它将PSObjects吐出到管道中以显示扫描结果。如果我正在扫描CIDR / 16子网,根据任务管理器,我返回的数据量将很好地进入512MiB。分析完结果以释放空间以完成其他任务后,我想找到一种分配这种内存使用的方法(我们必须使用少于8 GiB的内存...)。问题是我无法让PowerShell释放它在此内存上的保留权。有谁知道释放这种内存消耗的好方法?

我尝试将变量设置为$ null,Remove-Variable,然后调用[GC]::Collect(),但是任务管理器中的内存使用仍然保持相同(或更高)级别。我对这项看似简单的任务不知所措。也许内存已释放,但是任务管理器仅报告先前的分配?

最佳答案

托管内存的唯一重新分配将由CLR垃圾收集器完成。由于您已经尝试过GC收集,所以我想说您有一个托管内存库。也就是说,您尚未找到所有引用对象的根。我建议您使用RedGate的Memory Profiler或免费的ClrProfiler之类的工具来确定仍在引用创建的对象的对象。我相信,即使是Visual Studio 2013,也可以从转储文件中分析托管内存。这也可以帮助您找到所有引用数据对象的对象。顺便说一句,您的任何对象是否包装本地资源(句柄,内存等)?

关于c# - 无法在PowerShell 3.0和2.0中取消分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23073339/

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