2009-10-02 4 views
2

일부 배경 :에 의해PowerShell STA 모드는 SharePoint 메모리 누수 문제를 제거합니까?

SPSite 같은 그 COM 지원을받는 객체입니다 및 SPWeb은 다른 스레드에서 사용하면 안됩니다. 이는 PowerShell의 기본적으로 MTA 모드 사용과 충돌하며 위에 언급 된 누수 해결 방법 게시물에서 확인됩니다. 한 가지 제안 된 해결 방법은 PowerShell 2.0의 -STA 플래그를 시도하는 것이 었습니다.이 플래그는 문제를 해결해야하는 것처럼 보입니다. 그러나 그의 기사에 대한 코멘트에서 Zach는 STA 모드로는 충분하지 못하다고 제안했다.

이 내 COM 지식의 가장자리로 밀어, 그래서 누군가가 나를 이해하는 데 도움이 바라고 있어요 ...

  1. 한다 STA 모드 PowerShell을 파이프 라인을 통해 단일 스레드로 제한 개체 액세스를 유지하기에 충분 ?
  2. 그렇지 않은 이유는 무엇입니까?

답변

2

궁극적으로 Powershell 2.0을 사용하는 경우 -STA 모드로 충분해야합니다. 그 이유는 STA 모드에서 기본 runspace는 모든 대화식 명령 (및 스크립트)에 대해 단일 스레드를 다시 사용하기 때문입니다. Zach가 2 월에보고있는 PowerShell의 버전이 PowerShell 2.0의 현재 RC/RTM과 다르게 동작했을 가능성이 있습니다. 현재 기본값 인 ReUseThread 대신 UseNewThread를 사용했을 수 있습니다.

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의 기본 스레드 옵션이므로 중복되었습니다. 당신은 그러나

마이크로 소프트 PowerShell을 MVP 그 논쟁에 하드

+0

-Oisin MTA 모드에서 단일 스레드 ;-)

에서 실행이 기술을 사용할 수 있습니다 - 감사 세부 사항을 위해. 나는 그 당시에 ThreadOptions를 보았을 때 막연하게도 리콜을했지만 아마 dev VM의 사소한 메모리 누수로 인해 나를 괴롭히지 않을 것입니다. :) – dahlbyk