sto cercando di diagnosticare questa eccezione:System.Runtime.InteropServices.COMException (0x80070008): Memoria insufficiente è disponibile per elaborare questo comando
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)
...
Non sembra come uno qualsiasi dei normali tipi di " stoccaggio "hanno raggiunto qualsiasi limite. L'applicazione utilizza circa 400 MB di memoria, 70 thread, 2000 maniglie e il disco rigido ha molti GB gratuiti. La macchina esegue Windows 2003 Enterprise Server a 32 bit con 16 GB di RAM, quindi la memoria non dovrebbe essere un problema.
L'applicazione è in esecuzione come servizio Windows, pertanto non vengono utilizzati oggetti GDI. L'esaurimento degli handle GDI è una causa comune di questa eccezione.
Connessioni database, comandi & i lettori sono tutti avvolti con l'utilizzo di blocchi in modo che dovrebbero essere puliti correttamente.
UPDATE: La riduzione del numero di thread che stavamo utilizzando da 12 a 4 sembra aver risolto il problema. Siamo riusciti a correre senza errori per oltre 24 ore, prima che durassimo tra le 4 e le 8 ore. UPDATE2: Non ho mai capito quale risorsa stavamo esaurendo, ma la riduzione del numero di thread sembra aver risolto il problema. O almeno lo nascose.
È un processo a 64 bit? – SLaks
Girato nel buio (vedi interop) stai chiamando Marshal.ReleaseComObject? –
@ Marvin: l'interoperabilità viene eseguita da Oracle. – SLaks