很多人会拿着process中的PrivateMemorySize64或者VirtualMemorySize64的值来当作当前进程所占的内存,这个倒没什么问题。关键是有的人觉得这个值不够准确,任务管理器中的进程占用的内存更准确,通过比较发现,任务管理器中的进程内存值既不是PrivateMemorySize64,也不是VirtualMemorySize64。那它到底是什么呢?
其实任务管理器中的进程内存是性能计数器采样的一个样本值:
$pf=New-Object System.Diagnostics.PerformanceCounter $pf.CategoryName="Process" $pf.CounterName = "Working Set - Private" $pf.InstanceName = 'devenv' ($pf.NextValue()/1mb).ToString("0.0MB")
543.3MB
有图为证。
本文链接: https://www.pstips.net/get-the-memory-of-process-like-task-manager.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
我把devenv改为我使用的chrome,下面都没改,报错:
使用“0”个参数调用“NextValue”时发生异常:“计数器不是单个实例,需要指定实例名。”
谢谢提醒,帖子中少写了一句,已更新。
前端时间需要算内存,没找到比较好的代码,这个经验不错,值得学习!
使用“0”个参数调用“NextValue”时发生异常:“指定的类别中不存在实例“devenv devenv devenv”。”
所在位置 E:\Get-Memory.ps1:9 字符: 5
+ ($pf.NextValue()/1mb).ToString(“0.0MB”)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : InvalidOperationException
有多个进程的时候,运行都会出现这个错误。
原贴中的get-process 会对结果干扰,我已经删除了。