2009-04-22 7 views
3

Je reçois OutOfMemory Exception dans mon .net addin. L'addin utilise un grand nombre d'objets gérés et non gérés. Existe-t-il un moyen de piéger cette exception?Comment faire pour intercepter l'exception OutOfMemoryException dans .NET (complément Excel)

Mise à jour: Je pense que n'importe quelle application peut obtenir une exception OutofMemory si elle traite une grande quantité de données qui doivent être traitées et non libérées périodiquement. Supposons que j'ai une méthode qui analyse certaines structures en mémoire. Je lui donne 300 structures, il charge chacune d'entre elles en mémoire, les analyse et achève le traitement. Dans cette opération, l'utilisation de la mémoire était X. Maintenant, si je lui donne 3000 structures à traiter, il va analyser ces 3000 en mémoire et l'utilisation de la mémoire ira à 10X.

Updated

Ce problème est seulement vu dans Excel 2007 et non dans Excel 2003 que j'ai demandé pourquoi je un personnel MSDN à examiner.

+4

OOM, ainsi que quelques autres comme StackOverflowException, signifient généralement une application très malsain, qui est bientôt être mis hors de sa misère ... –

Répondre

3

Dans .Net, OutOfMemoryException est lancé par le moteur d'exécution lorsqu'il ne peut pas allouer la mémoire demandée à votre application. En tant que tel, il y a très peu de travail réel qui peut être fait pour gérer une telle exception.

Au lieu de l'attraper vous devriez l'empêcher de se produire en premier lieu. Ignorer l'exception ne fera pas disparaître le problème.

+2

acceptée ceci en tant que réponse parce que après avoir enquêté plus loin, les types de MSDN ont découvert qu'Excel devenait de la mémoire car les objets GDI disponibles sont tous utilisés par des structures (images). La limite d'objet GDI disponible par défaut pour un processus est de 10 000 (qui peut être augmentée à 65536 en modifiant le registre mais cela n'est pas recommandé). J'ai maintenant mis un contrôle sur le nombre d'objets GDI utilisés par les structures >> "Au lieu de l'attraper vous devriez l'empêcher de se produire" – A9S6

+0

C'est bon à savoir. Merci pour la mise à jour. –

0

Si vous obtenez une exception OutOfMemoryException, votre programme est mort, a cessé d'exister, a été transmis, il n'est plus et est parti rencontrer son créateur. Mais sérieusement, il n'est pas capable de récupérer une partie de la mémoire dont il est à court de sorte que vous ne pouvez rien faire.

Questions connexes