代码之家  ›  专栏  ›  技术社区  ›  dahlbyk

PowerShell STA模式是否消除了SharePoint内存泄漏问题?

  •  2
  • dahlbyk  · 技术社区  · 15 年前

    一些背景:

    简而言之,标准的SharePoint指南是由COM支持的对象 SPSite SPWeb 不同的线程不应使用。这与PowerShell在默认情况下使用MTA模式存在冲突,在上面引用的泄漏解决方法中进行了验证。一个建议的解决方法是尝试使用PowerShell2.0的-sta标志,这似乎可以解决问题;但是,在他在Zach之后的评论中指出,sta模式是不够的。

    这将把我的网络知识推向边缘,所以我希望有人能帮助我理解…

    1. STA模式是否足以将对象访问限制为通过PowerShell管道的单个线程?
    2. 如果不是,为什么?
    1 回复  |  直到 15 年前
        1
  •  2
  •   x0n    15 年前

    最后,如果您使用的是PowerShell2.0,那么-sta模式就足够了。原因是在STA模式下,默认的运行空间会为所有交互命令(以及脚本)重用一个线程。扎克在2月份研究的PowerShell版本的行为可能与当前PowerShell2.0的rc/rtm不同。它可能使用了usenewthread而不是当前的默认值reusethread:

    PS> [System.Management.Automation.Runspaces.Runspace]::DefaultRunspace
    
    Events                : System.Management.Automation.PSLocalEventManager
    ThreadOptions         : ReuseThread
    RunspaceConfiguration : System.Management.Automation.Runspaces.RunspaceConfigForSingleShell
    InitialSessionState   :
    Version               : 2.0
    RunspaceStateInfo     : Opened
    RunspaceAvailability  : Busy
    ConnectionInfo        :
    ApartmentState        : STA
    InstanceId            : 8d3bfae1-8b64-433d-9ab9-ce640b15f84f
    SessionStateProxy     : System.Management.Automation.Runspaces.SessionStateProxy
    Debugger              : System.Management.Automation.Debugger
    

    总之,你在这里很好。他所说的高级技术很可能是如何使用reusethread旋转一个新的运行空间,因为这是-sta的默认线程选项,所以现在是多余的。但是,可以使用此技术在MTA模式下在单个线程上运行;-)

    -奥辛

    微软PowerShell MVP