目前,我正在使用SAP Business One SDK。我从另一个团队那里拿了一些项目。该项目是一个SOAP Web服务。它已经用ASPX技术编写,无论如何另一个团队使用标准的DI API库。这是此解决方案的主要问题,因为它会导致内存泄漏的许多问题。
在调用DI API的每次操作后的源代码中,我尝试使用垃圾收集器,但不幸的是,这还不够。
Web服务托管在IIS上,我不得不设置一段时间重新启动它的选项。我知道这不是最好的解决方案,但它确实有效。显然,这种方式会产生很多问题。
我对此有疑问。有没有合理的解决方案?或者我将不得不使用DI Server重写源代码?
我已经阅读了很多关于此的内容,我在互联网上发现了一些文章。请不要在评论中添加任何链接,因为我很确定我已阅读过它们。
答案 0 :(得分:1)
每次使用DI API对象时都必须将其释放。否则,它将保留在内存中,这将导致您提到的内存泄漏。
释放它们的正确方法是使用ReleaseComObject。请记住,如果对象为null,则会出现异常,因此请先检查它。
if (oDocuments != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oDocuments);