首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理PSObject

如何处理PSObject
EN

Stack Overflow用户
提问于 2014-10-19 07:49:35
回答 1查看 1.3K关注 0票数 0

如下面的代码所示,我最终为站点集合中的每个站点创建了一个新的PSObject。最后,我需要为多个SharePoint web应用程序运行这个程序,每个应用程序包含几个站点,总站点跨越2000年。因此,这是大量正在创建的PSObjects。

PSObject没有dispose函数,所以我有哪些选项可以提高代码的效率和释放对象。

而且,每次执行$SiteInfoCollection += $object操作时,都会重新分配内存,因为它是一个动态扩展数组。根据几个月前我读过的一篇文章,任何内存重新分配的操作都是昂贵的,不利于性能。有什么办法使这一步骤也有效吗?

代码语言:javascript
复制
$SPWebApp = Get-SPWebApplication "http://portal.contoso.com"

$SiteInfoCollection = @()

foreach($site in $SPWebApp.sites)
    {
        $object = New-Object PSObject
        Add-Member -InputObject $object -MemberType NoteProperty -Name URL -Value ""
        Add-Member -InputObject $object -MemberType NoteProperty -Name Title -Value ""
        Add-Member -InputObject $object -MemberType NoteProperty -Name Template -Value ""

        $object.url = $site.url
        $object.title = $site.rootweb.title
        $object.template = $site.rootweb.WebTemplate

        $SiteInfoCollection += $object

        #$object.Dispose() #NOT valid operation
    }
    $site.Dispose()
}
$SiteInfoCollection
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-19 07:51:59

当时间到了,这个对象将被垃圾收集。它不是一个包含COM &的沉重的SharePoint对象,并且不需要在那里进行处理。

希望能够释放$site,因此将其放入foreach循环中。

对于大多数SharePoint PowerShell命令,您可以使用-AssignmentCollections而不是手动处理:

为了妥善处理而管理对象。使用对象(如SPWeb或SPSite )可以使用大量内存,而在脚本中使用这些对象需要适当的内存管理。使用SPAssignment对象,您可以将对象分配给变量,并在需要这些对象释放内存后将其释放。当使用SPWeb、SPSite或SPSiteAdministration对象时,如果不使用赋值集合或全局参数,则会自动释放这些对象。

获得相同功能的更多PowerShell方法是

代码语言:javascript
复制
$gc = Start-SPAssignment
Get-SPSite "http://portal.contoso.com" -Limit All -AssignmentCollection $gc | % {
    # Loop
}
Stop-SPAssignment -Identity $gc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26448498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档