我正在运行一个应用程序,它表现出一些非常特殊的问题。它可以正常运行大约 2.5 小时,然后突然非托管内存开始增长,并且增长迅速。在大约半小时左右的时间内,应用程序崩溃了。
应用程序未使用任何非托管 DLL。它正在与外部应用程序通信。它使用套接字(通过流使用)写入并通过 WCF 流读取。
我用 ANTS 对其进行了分析。非托管内存利用率的突然变化非常惊人;它永远保持完全平坦,然后突然开始上升并以稳定的速度继续上升,直到应用程序失败。托管内存中似乎没有什么不合适的。
鉴于我不是故意使用非托管代码,因此很难确定泄漏的来源。蚂蚁没有帮助。当代码从一开始就不是稳定增加时,很难清理代码的问题(应用程序一直处于空闲状态,尽管它确实每秒通过套接字用非常少量的数据 ping 它的服务器一次)。
再次迭代,这段时间应用程序和服务器都处于空闲状态;这是在一个隔离的测试系统(服务器和客户端)上运行的。客户端是泄漏的那个。