Устраняет ли режим PowerShell STA проблему утечки памяти SharePoint?

StackOverflow https://stackoverflow.com/questions/1508704

Вопрос

Немного предыстории:

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

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

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

Решение

В конечном счете, режима -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 ;-)

-Ойсин

Microsoft PowerShell MVP

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top