PowerShell Invoke-SqlCmd和内存使用情况

Ser*_*ver 5 sql-server powershell

如果我执行以下Powershell命令:

Invoke-Sqlcmd `
  -ServerInstance '(local)' -Database 'TestDatabase' `
  -Query "select top 1000000 * from dbo.SAMPLE_CUSTOMER" | Out-Null
Run Code Online (Sandbox Code Playgroud)

我看到我的内存使用量不断增加。它使用1GB的内存。

如果再次启动该命令,则内存增加到1.8GB,然后减少到800MB(垃圾回收?),然后再次开始增长。

我尝试按照http://blogs.technet.com/b/heyscriptingguy/archive/2013/07/30/learn-how-to-configure文章中的步骤将PowerShell Shell和插件的内存占用减少到100MB -powershell-memory.aspx,但是我仍然看到内存增加远远超过已配置的100MB。

我有一些问题:

  1. 为什么PowerShell不遵守设置MaxMemoryPerShellMB给出的内存限制?
  2. 为什么要Invoke-Sqlcmd吃掉内存,而不是“忘记”管道中处理的记录
  3. 为什么在完成处理后,PowerShell进程不自动回收内存?
  4. 如何在不占用大量内存的情况下处理许多SQL记录?