我有一个非常讨厌的问题。 Out项目在Windows Server 2012 R2系统上作为Windows服务运行。它是一个完全托管的应用程序,处理一些数据文件以收集测量统计数据等。
我在某个地方有内存泄漏,我在Perfmon中证实:我可以看到Gen2堆缓慢但肯定地增长。半小时到一小时后,应用程序崩溃了。
我已经整理了一个控制台应用程序来托管同一个应用程序,只是为了获得更多控制权并排除服务内容。同样的事发生在那里。 然后我用CLRProfiler启动了控制台应用程序,当我看到内存使用率一直很好而且总是很低时,我不相信我的眼睛,而正在处理完全相同的文件!
此外,内存泄漏并未出现在我们当前的开发环境中,仅出现在生产环境中。现在唯一的区别是生产版本使用Oracle.ManagedDataAccess数据提供程序,dev版本使用MySQL。即使托管的Oracle提供商有一些错误或任何问题,当使用分析器运行时我仍然看不到任何东西。
应用程序非常复杂,非常难以在没有探查器帮助的情况下找到漏洞。我很失望,希望任何人都能提出可以挽救这一天的事情。提前谢谢。
答案 0 :(得分:0)
事实上,Oracle.ManagedDataAccess驱动程序中存在一个问题,至少在I版本中使用(一个相当旧的版本)。泄漏似乎是由未发布的OracleParameter对象引起的。我将尝试使用最新版本,我真的希望它已经修复,因为使用非托管的ODP.NET是我最糟糕的噩梦之一。
感谢每个人都试图提供帮助的时间。
更新: 对于未来的读者,我可以确认使用最新版本(Oracle.ManagedDataAccess.dll,版本4.121.2.0),此内存泄漏已得到解决。