PowerShell Memory Leak and Prevention

Memory Leak

When writing PowerShell scripts, there are immense chances to form memory leaks if the script-writer does not free the objects correctly. When dealing with SPFarm, SPSiteAdministration SPSite and SPWeb objects with huge internal data, the problem can become more vulnerable when crunching system resources.

Preventions

We can prevent memory leaks quickly using the following Cmdlets.

  • Start-SPAssignment
  • Stop-SPAssignment

Start- SPAssignment & Stop-SPAssignment

Start-SPAssignment will start collecting memory objects. Later we can invoke the Stop-SPAssignment to release the memory.

$c = Start-SPAssignment

$w = Get-SPWeb -Site http://server -AssignmentCollection $c

Stop-SPAssignment $c

Explanation

In the preceding code, we are first declaring the variable $c pointing to collect the assignment objects. In the next line, Get-SPWeb will create a web object in $w and simultaneously it is added to the assignment collection. The Stop-SPAssignment will release all the memory objects within $c.

Here additional coding is required to add the web objects to the assignment collection. In production scenarios, a pre-existing PowerShell script must be modified and that will require much effort.

Using –Global Switch

We can do memory leak prevention quickly using the –Global switch. An example is given below.

Start-SPAssignment -Global

$w = Get-SPWeb –Site http://serfver –AssignmentCollection $c

Stop-SPAssignment -Global

Types of Assignment

There are the following 3 types of assignments.

  • No Assignment
  • Simple Assignment
  • Advanced Assignment

Simple Assignment is the one we have seen using the –Global parameter. This is used more often.

Advanced Assignment is the one with an assignment variable. This is used in advanced scripts.

No Assignment is where no parameters or variables are used. Here objects are disposed of in each iteration.

References: https://technet.microsoft.com/en-us/library/ff607664.aspx

Summary

In this article, we explored how to prevent memory leaks when writing SharePoint scripts.


Similar Articles