我有一个应用程序,它作为使用C#WCF编写的Windows服务运行。在生产代码中,我们看到了应用程序内存缓慢增长的行为。在查看代码之后,我们发现有一个字典(并发),其中项目被添加,而在作业完成时不会被删除。物品的速度约为每秒100。有没有办法在没有代码更改的情况下解决这个问题?或者是否有强迫应用程序在外部进行垃圾收集?据我所知,没有可能只是张贴它来了解那里是否有任何东西。
Item是两个属性的对象(都是int)。
答案 0 :(得分:1)
如果您将应用程序移动到IIS作为应用程序池运行,则可以配置应用程序池"recycle"。其中一个选项是recycle on Virtual Memory usage,它是ASP如何处理内存泄漏的。
您还可以滚动自己的回收,监控服务内存使用情况,并在达到阈值时重新启动它。
当然,应用程序回收 意味着重新启动流程,而您的WCF服务可能会对此做出严重反应,您的API调用可能会降低SLA,更糟糕的是,您可能会在WCF服务中暴露不需要的行为(错误)。但几乎是通过重新部署来“控制”生产中的泄漏的唯一方法。
理想情况下,修复泄漏并重新部署。