2017-11-11 75 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);