J'ai suivi la première réponse here, see below for code pour que la mémoire système soit utilisée sur une ligne donnée de mon code perl. Je suis sous Windows 7 Édition Familiale Basique, 64 bits, 4 Go RAM, 4.06 Go de mémoire virtuelle (Comme spécifié sous paramètres système avancés sous mon ordinateur). J'ai reçu le message suivant de perl à une ligne, avant que perl ne passe à Mémoire insuffisante.Mémoire système utilisée en Perl
Utilisation de la mémoire: 1916346368
En supposant que ce nombre est en octets (= 1,78 Go), pourquoi ne perl sortir de la mémoire? Comment puis-je obtenir l'utilisation totale de la mémoire système par tous les processus?
Le bloc de code pour calculer la mémoire est comme ci-dessous. J'utilise Strawberry Perl 5.12.3.0
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";
Perl -V donne des informations suivantes http://pastebin.com/mvF7YgKH
Mise à jour: Le problème se est résolu avec perl 64 bits. Mais j'ai aussi remarqué que le programme fonctionnait sans accroc sur 32 bits perl sur Ubuntu. Donc, peut-être Strawberry Perl sur Windows prend plus de mémoire que Perl sur Ubuntu.
Que faisait Perl lorsqu'il manquait de mémoire? – Schwern
@Schwern Il lit un fichier dans quelques hachages 3D. – user13107
@ user13107, nous devons voir la partie pertinente du code source qui manque de mémoire. – titanofold