我正在开发一个应该运行很长时间的应用程序,并通过ODP.NET广泛使用Oracle(11g)数据库。
但是,偶尔会发生一次(每2或3天)ODP.NET抛出一次System.AccessViolationException,然后需要重新启动应用程序。这是我的堆栈跟踪:
Unhandled exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at Oracle.DataAccess.Client.OpsSql.Prepare2(IntPtr opsConCtx, IntPtr& opsErrCtx, IntPtr& opsSqlCtx, IntPtr& opsDacCtx, OpoSqlValCtx*& pOpoSqlValCtx, string pCommandText, IntPtr& pUTF8CommandText, OpoMetValCtx*& pOpoMetValCtx, Int32 prmCnt)
at Oracle.DataAccess.Client.OracleCommand.ExecuteNonquery()
堆栈跟踪的其余部分不时不同,并且是指来自我的应用程序的内部调用。
现在,我在问这里之前做了相当多的研究,但我没有找到任何结论。许多其他人显然遇到了同样的问题,尽管根本原因似乎变化很大。我真的希望有人有这个解决方案:-)
在一个不相关的说明中,似乎此异常能够忽略我的catch {}块并导致应用程序每次发生时崩溃。那是因为它与内存损坏问题有关吗?
问候, 安德里亚
编辑:进一步的调查让我相信,值得启动“分布式事务协调器”服务并查看异常是否会被抛出。你怎么看?