PowerShell实现动态获取当前脚本运行时消耗的内存

   这篇文章主要介绍了PowerShell实现动态获取当前脚本运行时消耗的内存,本文直接给出实现脚本函数,需要的朋友可以参考下

  想粗略地理解一个脚本消耗了多少内存,或着在你往PowerShell中的变量存结果时,消耗了多少内存,可以借助于下面的函数:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

#requires -Version 2
 
$script:last_memory_usage_byte = 0
 
function Get-MemoryUsage
{
$memusagebyte = [System.GC]::GetTotalMemory('forcefullcollection')
$memusageMB = $memusagebyte / 1MB
$diffbytes = $memusagebyte - $script:last_memory_usage_byte
$difftext = ''
$sign = ''
if ( $script:last_memory_usage_byte -ne 0 )
{
if ( $diffbytes -ge 0 )
{
$sign = '+'
}
$difftext = ", $sign$diffbytes"
}
Write-Host -Object ('Memory usage: {0:n1} MB ({1:n0} Bytes{2})' -f $memusageMB,$memusagebyte, $difftext)
 
# save last value in script global variable
$script:last_memory_usage_byte = $memusagebyte
}

  你可以在任何时候运行Get-MemoryUsage,它会返回当前脚本最后一次调用后消耗的内存,同时和你上一次调用Get-MemoryUsage运行结果的进行对比,并显示内存的增量。

  这里的关键点是使用了GC,它在.NET Framwwork中负责垃圾回收,通常不会立即释放内存,想要粗略地计算内存消耗,垃圾回收器需要被指定释放未被使用的内存[gc]::Collect(),然后再统计分配的内存。

  为了更好的演示上面的函数我们来看一个调用的例子:

  ?

1
2
3
4
5
6
7
8

PS> Get-MemoryUsage
Memory usage: 6.7 MB (6,990,328 Bytes)
PS> $array = 1..100000
PS> Get-MemoryUsage
Memory usage: 10.2 MB (10,700,064 Bytes, +3709736)
PS> Remove-Variable -Name array
PS> Get-MemoryUsage
Memory usage: 7.4 MB (7,792,424 Bytes, -2907640)

时间: 2024-11-01 05:22:23

PowerShell实现动态获取当前脚本运行时消耗的内存的相关文章

PowerShell实现动态获取当前脚本运行时消耗的内存_PowerShell

想粗略地理解一个脚本消耗了多少内存,或着在你往PowerShell中的变量存结果时,消耗了多少内存,可以借助于下面的函数: #requires -Version 2 $script:last_memory_usage_byte = 0 function Get-MemoryUsage { $memusagebyte = [System.GC]::GetTotalMemory('forcefullcollection') $memusageMB = $memusagebyte / 1MB $dif

ansible结合CMDB动态获取inventory脚本教程

在运维工具中,选择了用ansible api来与服务器进行交互,用ansible的目的主要是使用简单,而且客户端不需要安装agent,服务端安装完ansbile后,便可对新机器进行管理. 为了结合资产管理系统(CMDB),所以要使用到动态获取inventory的方法,这样可以省去配置ansible服务端的hosts,所有的客户端IP,帐号,密码,端口都可以从CMDB中获取到.   动态inventory脚本必须支如下两个命令行参数: --host  (用来列出主机的详细信息) --list   

php脚本运行时的超时机制详解_php实例

在做php开发的时候,经常会设置max_input_time.max_execution_time,用来控制脚本的超时时间.但却从来没有思考过背后的原理. 趁着这两天有空,研究一下这个问题. 超时配置 php的ini配置如何起作用,这是一个老生常谈的话题了. 首先,我们在php.ini里进行配置.当php启动的时候(php_module_startup阶段),会尝试读取ini文件并解析.解析过程简单来说,是分析ini文件,提取出其中合法的键值对,并保存到configuration_hash表.

MS SQL执行大脚本文件时,提示“内存不足”的解决办法

问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是当数据库导出脚本很大,用Microsoft SQL Server Management Studio执行脚本时,往往会遇到"内存不足"的提示. 解决办法: 用微软自带的sqlcmd工具,可以导入执行.以SQL Server 2008R版本为例: 第一步:Win+R 键入:cmd 命令,开启命令行工具: 第二步:键入:cd C:\Program Files\Microsoft SQL Serv

Objective-C 检测运行时对象的内存大小

malloc_size 返回指针所指向对象字节数.但是这种方法不会考虑到对象成员变量指针所指向对象所占用的内存.跟instrument 的 Allocation计算出来的值相同. 官方解释: The malloc_size() function returns the size of the memory block that backs the allocation pointed to by ptr. The memory block size is always at least as l

实现运行时从字符串动态创建对象

创建|动态|对象|字符串 在运行时任意指定对象的创建类型,甚至是用表示类型的名字的字符串创建所需的对象,.net Framwork的反射机制给我们带来了解决问题的方法.这里,若只需要创建一般的对象,我们可以通过System.Activator来实现,而较复杂的我们可以通过获取构造方法来实现. 反射Reflection是.net中重要机制,通过反射,可以在运行时获得.net中每一个类型(包括类.结构.委派.接口.枚举)的成员,包括方法.属性.事件以及构造函数等,还可以获得每个成员的名称.限定符和参

ajax-预约操作时,动态获取id参数

问题描述 预约操作时,动态获取id参数 预约时,信息已经动态读取出来了,并以表格形式在前端显示了.那么如何获取id并将其换入后端进行处理实现预约 解决方案 http://blog.csdn.net/zk437092645/article/details/9340331

ASP.NET HTTP运行时组成详解

asp.net|详解 简介 不管使用哪种底层平台可靠性和性能都是对所有 Web 应用程序的主要要求尽管从某种意义上讲这两个要求是相互矛盾的.例如要构建更可靠.更健壮的应用程序可能需要将 Web 服务器与具体的应用程序分离使应用程序在进程外工作.但是如果在不同于 Web 服务器进程的内存环境中工作应用程序将变慢.因此需要采取合理的措施以确保进程外代码尽可能快地运行. 在构建 Microsoft? ASP.NET 运行时环境时依据的设计原则即充分考虑可靠性和性能.得到的 ASP.NET 进程模型包含

HotSpot运行时概览#2

解释器 (译者注:解释器.编译器坑太大,翻译太水请见谅:) 当前HotSpot用于执行字节码的解释器是一种基于模板的解释器.虚拟机启动时,InterpreterGenerator会使用TemplateTable中的信息(每一个字节码对应的汇编代码)在内存中生成一个解释器.一个模板描述一个字节码.TemplateTable定义了所有字节码的模板,并提供了访问的方法.非生产标记-XX:+PrintInterpreter可以用来查看VM启动时在内存中生成的模板. 使用模板要优于传统的switch循环,