Ist Powershell-STA-Modus Sharepoint-Speicherverlust Problem beseitigen?
-
19-09-2019 - |
Frage
Einige Hintergrundinformationen:
- Sharepoint + Powershell ist (in der Regel) eine perfekte Wer passt zu von Zach Rosenfield [MSFT]
- Sharepoint + Powershell-Leak Umgehungen von mir
- SO: Könnten Sie STA und MTA erklären ?
Kurz gesagt, Sharepoint-Standardführung ist, dass COM-backed Objekte wie SPSite
und SPWeb
sollen nicht von verschiedenen Threads verwendet werden. Dies steht in Konflikt mit Powershell Verwendung von MTA-Modus standardmäßig in der Zeit nach oben referenzierten Leak Umgehungen verifiziert. Eine vorgeschlagene Abhilfe war zu Powershell 2.0 ist -STA Flagge zu versuchen, die wie es scheint, sollte das Problem zu lösen; jedoch in den Kommentaren auf seinem Posten Zach schlägt STA-Modus ist nicht genug.
Dies drückt auf den Rand meines COM Wissen, so dass ich bin der Hoffnung, jemand kann mir helfen, zu verstehen ...
- Sollte STA-Modus ausreichend sein, Objektzugriff beschränkt sich auf einen einzelnen Thread zu halten über Powershell-Pipelines?
- Wenn nicht, warum?
Lösung
Letztlich sollte -STA Modus genug sein, um vorausgesetzt, Sie verwenden Powershell 2.0. Der Grund dafür ist, dass in STA-Modus, der Standard Runspace für alle interaktiven Befehle einen einzelnen Thread wieder verwendet (und Skripte auch). Es ist möglich, dass die Version von Powershell, die Zach wurde anders in Februar suchen verhielten sich, dass die aktuelle RC / RTM von Powershell 2.0. Es kann UseNewThread anstelle des aktuellen Standard verwendet, 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
Also kurz gesagt, du bist hier richtig. Die hoch entwickelte Technik, die er sprach, war höchstwahrscheinlich, wie eine neue Runspace mit ReUseThread spin up, die nun überflüssig ist, da dies die Standard-Thread-Option für -STA ist. Sie könnten jedoch diese Technik auf einem einzigen Thread in MTA-Modus ausgeführt; -)
-Oisin
Microsoft Powershell MVP