PowerShell实现动态获取当前脚本运行时消耗的内存
想粗略地理解一个脚本消耗了多少内存,或着在你往PowerShell中的变量存结果时,消耗了多少内存,可以借助于下面的函数:
#requires-Version2
$script:last_memory_usage_byte=0
functionGet-MemoryUsage
{
$memusagebyte=[System.GC]::GetTotalMemory('forcefullcollection')
$memusageMB=$memusagebyte/1MB
$diffbytes=$memusagebyte-$script:last_memory_usage_byte
$difftext=''
$sign=''
if($script:last_memory_usage_byte-ne0)
{
if($diffbytes-ge0)
{
$sign='+'
}
$difftext=",$sign$diffbytes"
}
Write-Host-Object('Memoryusage:{0:n1}MB({1:n0}Bytes{2})'-f$memusageMB,$memusagebyte,$difftext)
#savelastvalueinscriptglobalvariable
$script:last_memory_usage_byte=$memusagebyte
}
你可以在任何时候运行Get-MemoryUsage,它会返回当前脚本最后一次调用后消耗的内存,同时和你上一次调用Get-MemoryUsage运行结果的进行对比,并显示内存的增量。
这里的关键点是使用了GC,它在.NETFramwwork中负责垃圾回收,通常不会立即释放内存,想要粗略地计算内存消耗,垃圾回收器需要被指定释放未被使用的内存[gc]::Collect(),然后再统计分配的内存。
为了更好的演示上面的函数我们来看一个调用的例子:
PS>Get-MemoryUsage Memoryusage:6.7MB(6,990,328Bytes) PS>$array=1..100000 PS>Get-MemoryUsage Memoryusage:10.2MB(10,700,064Bytes,+3709736) PS>Remove-Variable-Namearray PS>Get-MemoryUsage Memoryusage:7.4MB(7,792,424Bytes,-2907640)
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短