Устраняет ли режим PowerShell STA проблему утечки памяти SharePoint? - PullRequest
2 голосов
/ 02 октября 2009

Некоторый фон:

Короче говоря, стандартное руководство SharePoint гласит, что объекты с поддержкой COM, такие как SPSite и SPWeb, не должны использоваться разными потоками. Это вступает в противоречие с использованием PowerShell режима MTA по умолчанию, что проверено в сообщении об утечках, упоминавшемся выше. Одним из предложенных способов решения этой проблемы было использование флага -STA PowerShell 2.0, который, похоже, должен решить проблему; однако в комментариях к своему сообщению Зак предполагает, что режима STA недостаточно.

Это отталкивает меня от знания COM, так что я надеюсь, что кто-то может помочь мне понять ...

  1. Должен ли режим STA быть достаточным, чтобы доступ к объектам был ограничен одним потоком через конвейеры PowerShell?
  2. Если нет, то почему?

1 Ответ

2 голосов
/ 02 октября 2009

В конечном итоге, режима -STA должно быть достаточно, если вы используете Powershell 2.0. Причина этого в том, что в режиме STA пространство выполнения по умолчанию повторно использует один поток для всех интерактивных команд (и сценариев тоже). Вполне возможно, что версия powershell, на которую смотрел Зак в феврале, вела себя иначе, чем нынешний RC / RTM PowerShell 2.0. Возможно, он использовал 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

...