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

标签 c# powershell

不久前,我用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/

相关文章:

c# - 泛型问题。我只是不明白如何制作通用方法

c# - Mediatr:减少 DI 对象的数量

internet-explorer - 如何从 Powershell 访问 Internet Explorer 运行实例的经典 Internet Explorer COM 自动化对象?

windows - 运行对话框执行 powershell 命令

powershell - 如何在Powershell中创建可变长度的char数组?

html - 使用 powershell 检索 HTML 中的文本

c# - 在 C# 中,如何获取数组内对象的属性?

c# - MVC - 使用 AJAX 调用导致服务器端页面验证在按钮单击时触发

c# - 在单个键盘快捷键中使用 R# 重新格式化代码

r - 如何在R中使用powershell删除csv文件中的行?