gpt4 book ai didi

powershell - 在 Powershell 中不使用 dispose() 有多糟糕?

转载 作者:行者123 更新时间:2023-12-03 06:53:30 24 4
gpt4 key购买 nike

有时我们需要在 SharePoint 中执行小型管理任务。一个简单的 PowerShell 脚本是一个非常好的工具。例如,这样的脚本可以枚举列表的事件处理程序:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$site = new-object Microsoft.SharePoint.SPSite($args[0])
$site.RootWeb.Lists["MyList"].EventReceivers > C:\MyListHandlers.txt

众所周知,SPSiteSPWeb 等对象在调用后必须进行 Dispose()-d,否则会发生内存泄漏。最好是打电话

$site.RootWeb.dispose()
$site.dispose()

在此脚本的末尾。但是,如果这是一个仅运行一次的 Powershell 脚本,并且我们知道 PowerShell 会在执行后进行清理 - 不调用 dispose() 有那么糟糕吗?

所以,我的问题是 - 如果有时我运行这样的脚本是否会有危险?它会影响 SharePoint 场(或我运行脚本的服务器)的整体稳定性吗?

最佳答案

此内容已被编辑以包含安全、非具体的答案。

一般:处理所有内容,因为 Dispose 是 .NET 框架释放外部资源(例如文件句柄、TCP 端口、数据库连接等)的方法。除非调用 Dispose(),否则不保证资源会被释放。所以要小心。这是一般的非 SharePoint 答案。

特别是在处理 SharePoint 时:当您关闭 PowerShell.exe 进程时,内存将被释放。如果您需要处置对象以降低内存压力(在生产环境中很重要,或者如果您要循环访问所有站点/网站),请务必进行处置。如果没有,您无需担心处置问题。

我们之所以如此热衷于处置,是因为大多数 SharePoint 代码都在长时间运行的进程中运行(在 ASP.NET 工作进程或 OWSTimer.exe 中),并且未能处置可能会导致困难 -排除故障、突发灾难(即网络服务器崩溃)。在使用 PowerShell 时,这些灾难性的性能问题/OutOfMemoryExceptions 大多数时候不会影响我。我运行临时脚本,由于无法处理对象而浪费了大约 3-50MB 的 RAM,我关闭了 PowerShell 窗口并释放了内存。 大多数时间这不是问题。

我已经构建了用于使用 SharePoint 的脚本,并且大多数时候我都懒得进行处理。

Here is a script wherein I dispose SPSite and SPWeb objects

Here is a script in which I don't bother to dispose an SPSite object

关于powershell - 在 Powershell 中不使用 dispose() 有多糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1999858/

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