Système.Moment de l'exécution.InteropServices.COMException (0x80070008): Pas assez de mémoire disponible pour traiter cette commande

Je suis en train de diagnostiquer cette exception :

System.Runtime.InteropServices.COMException (0x80070008): Not enough storage is available to process this command. (Exception from HRESULT: 0x80070008)
at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(Type objectType)
at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(Type serverType)
at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(Type serverType, Object[] props, Boolean bNewObj)
at Oracle.DataAccess.Client.CThreadPool..ctor()
at Oracle.DataAccess.Client.OracleCommand.set_CommandTimeout(Int32 value)
...

Il ne ressemble pas à l'un quelconque des types normaux de "stockage" ont touché toutes les limites. La demande est à l'aide d'environ 400 mo de mémoire, 70 threads, 2000 poignées et le disque dur a beaucoup de GO de libre. La machine est en cours d'exécution Windows 2003 Enterprise Server 32 bits avec 16 go de RAM ainsi, la mémoire ne devrait pas être un problème.

L'application est en cours d'exécution en tant que service windows, donc il n'y a pas d'objets GDI utilisé. Cours de GDI poignées est une cause fréquente de cette exception.

Connexions de base de données, commandes & les lecteurs sont tous enveloppés avec l'utilisation de blocs de sorte qu'ils devraient être nettoyée correctement.

Mise à JOUR: Réduire le nombre de threads, nous avons été à l'aide de 12 à 4 semble avoir résolu le problème. Nous avons réussi à exécuter sans erreur pendant plus de 24 heures, avant de nous ont été d'une durée comprise entre 4 et 8 heures.
UPDATE2: je n'ai jamais compris comment les ressources nous ont été en cours d'exécution hors de, mais la réduction du nombre de threads semble avoir résolu le problème. Ou au moins caché.

Est-il un processus 64 bits?
Shot in the dark (seeying interop) êtes-vous d'appeler le Maréchal.ReleaseComObject?
L'interopérabilité est fait par l'Oracle.
Alors pourquoi ne vous ai 16 go de RAM?
16 GO de RAM physique peut être consulté par les 32 Bits de Windows Server 2003 par le PAE. PAE n'affecte pas la quantité de mémoire virtuelle qui peut être accessible par une application. Voir le commutateur /3GB et d'adressage étendu "au Courant" des mots-clés pour augmenter la mémoire virtuelle à 3 GO.

OriginalL'auteur Darryl Braaten | 2010-03-12