ich diese Ausnahme zu diagnostizieren versuchen:System.Runtime.InteropServices.COMException (0x80070008): nicht genügend Speicher verfügbar, um diesen Befehl zu verarbeiten
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)
...
Es sieht nicht wie eine des normalen Typs von " Speicher "haben keine Grenzen gesetzt. Die Anwendung verwendet ungefähr 400 MB Speicher, 70 Threads, 2000 Griffe und die Festplatte hat viele GB frei. Die Maschine läuft Windows 2003 Enterprise Server 32bit mit 16 GB RAM, so Speicher sollte kein Problem sein.
Die Anwendung wird als Windows-Dienst ausgeführt, sodass keine GDI-Objekte verwendet werden. Das Ausführen von GDI-Handles ist eine häufige Ursache dieser Ausnahme.
Datenbankverbindungen, Befehle & Leser sind alle mit Blöcken verpackt, so dass sie richtig aufgeräumt werden sollten.
UPDATE: Reduzieren der Anzahl der Threads, die wir von 12 bis 4 verwendeten, scheint das Problem behoben zu haben. Wir haben es über 24 Stunden geschafft, ohne Fehler zu laufen, bevor wir zwischen 4 und 8 Stunden dauerten. UPDATE2: Ich habe nie herausgefunden, auf welche Ressource wir keinen Zugriff hatten, aber die Anzahl der Threads zu reduzieren scheint das Problem zu beheben. Oder zumindest versteckte es.
Ist es ein 64-Bit-Prozess? – SLaks
Shot in der Dunkelheit (seyying Interop) rufen Sie Marshal.ReleaseComObject? –
@Marvin: Die Interop wird von Oracle gemacht. – SLaks