Im se heurtant à un problème où l'outil im utilisant pour le développement (un outil de simulateur) continue à lancer OutofMemoryException, je sais que ce n'est pas mon application, car peu importe ce que le projet im en cours, il arrive. La seule solution que j'ai pour le moment est de redémarrer mon PC, y a-t-il un moyen de vider/effacer l'exécution du CLR afin de ne pas avoir à redémarrer mon PC chaque fois que cela arrive? Les exceptions OutOfMemory n'indiquent pas nécessairement un problème avec le runtime.Effacer la mémoire CLR
Répondre
Chaque fois que votre système manque de mémoire, peu importe ce qui le consume, cela peut arriver.
Regardez la liste des processus dans le gestionnaire de tâches et voyez ce qui consomme le plus de mémoire.
Je vois, eh bien, en regardant mon gestionnaire de tâches, Im seulement en utilisant 1,68 Go de mémoire et le PC a 4 Go à sa disposition. Donc, je ne pense pas que c'est les ressources physiques c'est le problème – Mark
Ok. Il se pourrait que le tas du GC soit fragmenté. Vous pouvez essayer d'utiliser la commande DumpHeap dans l'extension de débogage SOS (http://msdn.microsoft.com/en-us/library/bb190764%28VS.80%29.aspx). Si vous voyez un grand pourcentage de machines à sous "gratuites", vous avez une fragmentation. –
Et si je fais? – Mark
Chaque processus qui exécute le code managé démarre une copie distincte de l'exécution CLR - et lorsque tout type de processus est terminé, la mémoire qu'il a consommée est récupérée dans le pool général.
Il n'y a rien partagé pour "vider" ou "effacer".
Est-il possible que votre outil de simulation ne se bloque pas «complètement» - que le processus reste dans un état défectueux?
Peut-être, mais je ne peux pas voir les processus qui semblent suspectes pour le moment. Je n'ai vraiment aucune idée :( – Mark
Il semble que ce soit un outil tiers. Donc, je vais déposer une demande de bogue avec eux.
Mais comme d'autres l'ont dit, le problème sera contenu dans un processus du système d'exploitation. En utilisant le gestionnaire de tâches, vous devriez être capable d'identifier le processus incriminé et de le tuer. Cela va récupérer la mémoire et effacer l'ardoise. Vous devrez ensuite redémarrer votre simulation.
Si ce problème vous empêche de terminer votre simulation, alors je déposerais une demande de bogue urgente (mais pas fâchée).
C'est juste la chose, je ne vois pas de tâches qui prennent autant de mémoire.Mais ne vous inquiétez pas, je vais soulever une correction d'un bug! :) – Mark
OoME peut être causé par des choses autres que d'utiliser beaucoup de la mémoire. Une fois j'ai eu un OoME parce que j'ai oublié de disposer des objets Bitmap, j'ai épuisé la fourniture de poignées GDI. – ligos
Un processus en mode utilisateur x86/32 bits sous Windows dispose uniquement d'un espace de mémoire virtuelle adressable de 2 Go. Un processus x64/64 bits a 16 To de mémoire virtuelle adressable. Vous n'avez pas dit si votre processus était de 32 ou 64 bits - mais je suppose que c'est 32 bits. Une fois qu'un processus 32 bits commence à s'aventurer dans la zone de plus de 1,5 Go de mémoire virtuelle ou engagée, vous jouez avec le feu et il est temps que l'application se bloque. Il n'y a pas de nombre précis sur le moment où il va se bloquer car chaque application est différente. Parlons donc du "2GB" de l'espace adressable ... la mémoire utilisée par votre application n'a PAS accès à l'ensemble des 2Go de mémoire. Il est en tête utilisé par beaucoup de morceaux que le CLR a besoin pour exécuter une application:
- Les 8 tas différents pour une application .NET - voir ma réponse à .NET process memory usage = 5x CLR Heap Memory?
- en tête du noyau pour l'exécution du processus en mode utilisateur
- Threads
- etc.
vous pouvez avoir des concerts de mémoire disponible sur votre système, mais une application peut facilement tomber en panne si elle est x86 et proche de la limite décrite ci-dessus.
J'ai posté un peu de réponses et d'informations sur la mémoire CLR ici sur StackOverflow décrivant comment beaucoup de cela fonctionne. Cherchez mon nom et vérifiez quelques-unes des autres réponses. Cela pourrait aider à éclaircir un peu les choses.
HTH
Im à mon esprit fin ici ... Je dois comprendre ce que l'enfer se passe, je ne peux pas se permettre de continuer à redémarrer mon PC – Mark
Puis-je augmenter ma mémoire CLR en quelque sorte? – Mark