bestsource

파워셸에서 처분하지 않는 것은 얼마나 나쁜 일입니까?

bestsource 2023. 8. 17. 21:34
반응형

파워셸에서 처분하지 않는 것은 얼마나 나쁜 일입니까?

때로는 쉐어포인트에서 작은 관리 작업을 수행해야 합니다.단순한 PowerShell 스크립트는 이를 위한 매우 유용한 도구입니다.예를 들어, 이러한 스크립트는 목록의 이벤트 핸들러를 열거할 수 있습니다.

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$site = new-object Microsoft.SharePoint.SPSite($args[0])   
$site.RootWeb.Lists["MyList"].EventReceivers > C:\MyListHandlers.txt

다과같 물체가은과 같은 SPSite그리고.SPWeb그래야 합니다Dispose()호출 후 -d, 그렇지 않으면 메모리 누수가 발생합니다.으로 전화하는 것이 가장 좋을 것입니다.

$site.RootWeb.dispose()
$site.dispose()

이 대본의 마지막에.그러나 이 스크립트가 한 번만 실행되는 PowerShell 스크립트이고 실행 후 PowerShell이 정리된다는 것을 알고 있다면 폐기()를 호출하지 않는 것이 그렇게 나쁜가요?

따라서 질문은 이러한 스크립트를 실행할 경우 위험 요소가 있습니까? SharePoint 팜(또는 스크립트를 실행 중인 서버)의 전반적인 안정성에 영향을 미칠까요?

안전하고 구체적이지 않은 답변을 포함하도록 편집되었습니다.

일반적으로: 모두 폐기합니다. 폐기가 해당되기 때문입니다.파일 핸들, TCP 포트, 데이터베이스 연결 등과 같은 외부 리소스를 확보하는 NET 프레임워크의 방법.Dispose()를 호출하지 않으면 리소스가 해제되지 않습니다.그러니 조심하세요.이것은 쉐어포인트가 아닌 일반적인 답변입니다.

특히 SharePoint를 다루는 경우:PowerShell.exe 프로세스를 닫으면 메모리가 해제됩니다.메모리 부담을 줄이기 위해 개체를 폐기해야 하는 경우(운영 환경에서 중요하거나 모든 사이트/웹을 루프하는 경우)에는 반드시 폐기해야 합니다.그렇지 않다면 폐기에 대해 걱정할 필요가 없습니다.

우리가 애초에 폐기에 열광하는 이유는 대부분의 쉐어포인트 코드가 장기 실행 프로세스(ASP)에서 실행되기 때문입니다.NET worker process 또는 OWSTimer.exe)를 처리하지 못하면 문제 해결이 어렵고 갑작스러운 재해(예: 웹 서버 이동 붐)가 발생할 수 있습니다.이러한 심각한 성능 문제/메모리 부족PowerShell에서 작업할 때 예외는 대부분 영향을 주지 않습니다.애드혹 스크립트를 실행하면 개체를 폐기하지 못해 최대 3-50MB의 RAM이 낭비되고 PowerShell 창을 닫으면 메모리가 확보됩니다.대부분은 문제가 되지 않습니다.

SharePoint를 사용하기 위한 스크립트를 구축했으며 대부분의 경우 폐기할 필요가 없습니다.

다음은 SP Site 및 SP Web 개체를 삭제하는 스크립트입니다.

다음은 SP 사이트 개체를 폐기하지 않는 스크립트입니다.

그냥 따라오세요.

한번 실행되면 메모리가 해방되는 간단한 스크립트일지라도, 어느 시점에서 더 큰 스크립트의 내부 루프에 복사/붙여넣을지는 알 수 없습니다. :-)

정확성을 위해 항상 위의 링크에 지정된 대로 SP 개체를 폐기해야 합니다.

가능하면 Dispose(폐기)를 호출하는 것이 좋습니다.심지어 PowerShell 내부에서도.

SharePoint 라이브러리에는 COM 개체의 래퍼일 뿐인 코드가 많이 포함되어 있으며, 이러한 COM 개체 중 많은 수가 자체 풀과 캐시를 가지고 있습니다.Dispose에 대한 .NET 호출은 실제로 COM 개체에게 자신의 개체를 해제할 수 있음을 지시합니다(호출 프로세스 이외의 수명이 있을 수 있음).

다음은 관련 정보입니다. http://blogs.msdn.com/sharepoint/archive/2009/02/11/sharepoint-and-powershell-knowledge.aspx

셸이 PowerShell 스크립트의 수명보다 긴 외부 리소스에 액세스하는 경우에는 Dispose를 호출해야 합니다.

그러나 스크립트에 의해 할당된 리소스인 경우 정리할 필요가 없습니다.스크립트가 종료되면 스크립트에 할당된 모든 메모리가 정리됩니다.

프로세스를 종료하면 일이 정리되지만 주의해야 합니다.팜의 모든 사이트를 포함하는 루프를 수행할 경우, 처리 누락으로 인해 서버 속도가 느려질 수 있습니다.스크립팅은 배치 작업에 가장 유용하므로 항상 이 점을 염두에 두십시오.

언급URL : https://stackoverflow.com/questions/1999858/how-bad-is-it-to-not-dispose-in-powershell

반응형