一些背景:
Zoji Rosenfield的
简而言之,标准的SharePoint指导原则是,不应由COM支持的对象
SPSite
和SPWeb
被不同的线程使用。在默认情况下,这与PowerShell在默认情况下使用MTA模式冲突,已在上面引用的“泄漏解决方法”帖子中进行了验证。建议的解决方法是尝试使用PowerShell 2.0的-STA标志,这似乎应该可以解决问题。但是,扎克(Zach)在他的评论中暗示STA模式是不够的。这 push 了我对COM知识的了解,因此我希望有人可以帮助我理解...
最佳答案
最终,如果您使用的是Powershell 2.0,则-STA模式应该足够了。原因是在STA模式下,默认运行空间将单个线程重用于所有交互式命令(以及脚本)。 Zach在二月份查看的Powershell版本的行为可能与PowerShell 2.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模式下在单个线程上运行;-)
-Oisin
Microsoft PowerShell MVP
关于sharepoint - PowerShell STA模式是否可以消除SharePoint内存泄漏问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1508704/