2017-11-11 100 views
0

目前,我正在使用SAP Business One SDK。我从另一个团队拿了一些项目。该项目是一个SOAP Web服务。它是用ASPX技术编写的,无论如何,另一个团队使用标准的DI API库。这是该解决方案的主要问题,因为它会导致很多内存泄漏问题。SAP B1 - 在SOAP Web服务中使用stanard dll's

在调用DI API的每个操作后的源代码中,我尝试使用垃圾收集器,但不幸的是,这是不够的。

Web服务托管在IIS上,我不得不设置一段时间重新启动它的选项。我知道这不是最好的解决方案,但它有效。显然,这样会产生很多问题。

我对此有疑问。有没有合理的解决方案?或者我将不得不使用DI服务器重写源代码?

我已经阅读了很多关于这个,我在互联网上找到一些文章。请不要在评论中提供任何链接,因为我确信我已阅读过它们。

+0

由于您发现的问题,我一直将DI连接置于另一个进程之间,并在它们之间有一个队列。 – Daz

+0

你能给我一些你的解决方案的例子吗?这很有趣。提前致谢。 –

+0

最简单的方法是构建要创建的更新的XML,将其放入文件/数据库表/消息队列(或类似文件)中,然后让控制台应用程序或服务将其导入并将XML推入DI。假设您的事务适用于DI的LoadFromXML方法。显然你的有效载荷数据和服务可能更复杂一些。 – Daz

回答

1

每次使用DI API对象时,都必须将其释放。否则,它会留在内存中,并会导致你提到的内存泄漏。

释放它们的正确方法是使用ReleaseComObject。请记住,如果对象为空,您将收到一个异常,请先检查它。

if (oDocuments != null) 
    System.Runtime.InteropServices.Marshal.ReleaseComObject(oDocuments);