2009-07-12 41 views

回答

4

如果您使用ActivePerl,其中一些解決方案將無法工作。我已經拼湊出了一些我認爲應該可以在ActivePerl中使用的東西,但它尚未在5.10以下進行測試,因此您的里程可能會有所不同。作爲大同回答,您可以得到不同的數字取決於你問什麼,即MaximumWorkingSetSize VS WorkingSetSize

use Win32::OLE qw/in/; 

sub memory_usage() { 
    my $objWMI = Win32::OLE->GetObject('winmgmts:\\\\.\\root\\cimv2'); 
    my $processes = $objWMI->ExecQuery("select * from Win32_Process where ProcessId=$$"); 

    foreach my $proc (in($processes)) { 
     return $proc->{WorkingSetSize}; 
    } 
} 

print 'Memory usage: ', memory_usage(), "\n"; 
7

一種方法是使用Proc::ProcessTable

use Proc::ProcessTable; 

print 'Memory usage: ', memory_usage(), "\n"; 

sub memory_usage() { 
    my $t = new Proc::ProcessTable; 
    foreach my $got (@{$t->table}) { 
     next 
      unless $got->pid eq $$; 
     return $got->size; 
    } 
} 
+1

如果你已經安裝了Cygwin這將只能在Windows上運行。 – Joel 2011-05-18 14:57:52

2

WMI是在Windows下從程序中檢查這種東西的標準方式。我相信你會尋找this

MaximumWorkingSetSize是正在使用的物理RAM的值。 VirtualSize是您使用的總地址空間的大小。

相關問題