Ha modalità PowerShell STA eliminare SharePoint problema di perdita di memoria?
-
19-09-2019 - |
Domanda
Alcuni retroscena:
- SharePoint + PowerShell è (di solito) un perfetto abbinare da Zach Rosenfield [MSFT]
- SharePoint + PowerShell perdite Soluzioni alternative da me
- SO: Potrebbe spiegare STA e MTA ?
In breve, la guida SharePoint standard è che gli oggetti COM-backed come SPSite
e SPWeb
non dovrebbero essere utilizzati da diversi thread. Ciò è in contrasto con l'utilizzo di PowerShell modalità MTA di default, verificato nel post di perdite Soluzioni alternative di cui sopra. Una soluzione suggerita è stato quello di provare PowerShell 2.0 di bandiera -sta, che sembra che dovrebbe risolvere il problema; tuttavia, nei commenti sul suo post Zach suggerisce modalità STA non è sufficiente.
Questo spinge al bordo della mia conoscenza COM, quindi spero che qualcuno possa aiutarmi a capire ...
- Dovrebbe modalità STA essere sufficiente a mantenere l'accesso all'oggetto limitato a un singolo filo attraverso condutture PowerShell?
- Se no, perché?
Soluzione
In definitiva, la modalità -sta dovrebbe essere sufficiente a condizione che si sta utilizzando PowerShell 2.0. La ragione di questo è che in modalità STA, la spazio di esecuzione predefinito riutilizza un solo filo per tutti i comandi interattivi (e script troppo). E 'possibile che la versione di PowerShell che Zach stava guardando nel mese di febbraio si è comportato in modo diverso che l'attuale RC / RTM di PowerShell 2.0. Potrebbe essere utilizzato UseNewThread al posto del predefinito corrente, 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
Così, in breve, sei ok qui. La tecnica avanzata di cui stava parlando era più probabile come far girare un nuovo spazio di esecuzione utilizzando ReUseThread che è superfluo ora dal momento che è l'opzione predefinita per filo -sta. Si potrebbe tuttavia utilizzare questa tecnica per l'esecuzione su un singolo thread in modalità MTA; -)
-Oisin
Microsoft PowerShell MVP