【问题标题】:Disposal and cleanup in PowerShell - manual or automatic?PowerShell 中的处理和清理 - 手动还是自动?
【发布时间】:2025-12-18 04:35:01
【问题描述】:

在过去的几个月里,我一直在大量使用 PowerShell。不得不说,这让我大吃一惊。我认为只是过度膨胀的 CMD 版本,实际上是一种非常健壮、面向对象和通用的 .NET 语言。

我之前在语言方面的经验(都是自学的)是 Java、C++ 和 Wiring(稀释的 Arduino/C++ 的 Particle 变体),其中很多是在受限环境 (CoAP) 中。在受限的嵌入式环境中工作使我更加了解内存处理和占用*。如果您的系统资源有限,如果不加以检查,内存泄漏可能会造成毁灭性的后果。

话虽如此,我不确定 PowerShell 是否能直观地处理内存分配和处置。因为它是一种高级语言,所以在幕后处理这些是有道理的,但我想确定一下。我看到了一个 PowerShell 脚本,当它使用特定的 $object 完成时,它实际上调用了 $object.Dispose()

那么,我需要为我创建的每个New-Object 调用一个Dispose() 方法吗?

谢谢!


*我了解 ATMega328P 微控制器 (30kb ROM\2kb RAM) 等系统与计算机或服务器等信息系统相比存在巨大差异,但是,如果处于持续运行状态,内存泄漏加起来很可能导致崩溃。另外,我知道会话结束后所有内容都会被转储。

【问题讨论】:

    标签: powershell memory memory-leaks dispose


    【解决方案1】:

    这不是必需的,但它仍然是一种很好的做法。没有它,PowerShell 仍会在您之后进行清理,但可能需要更长的时间。当然,只要您的代码包含对它们的引用,对象就不会被自动处置。

    Related.

    【讨论】:

    • 太棒了。谢谢!如果您不介意我在这里提出另一个与您提供的答案相关的问题:PowerShell 中是否允许使用指针?这在很大程度上与 PowerShell 脚本的预期用途有关——我希望在持久状态下运行它。如果我可以在开发过程中降低风险,那么在生命周期管理中就会变得更加容易。
    • 我认为 PowerShell 不允许访问指针。您可以使用引用 ([ref]),并且对象通常是通过引用传递的(如果您想创建实际副本,则需要显式克隆对象),但这就是 AFAIK。
    最近更新 更多