← 返回卷宗
編程筆記

SwissEphNet

曆法

為了嘗試能夠實現Windows上開發,Linux上運行,所以採用了Asp.net core,然而在使用SwissEphNet時,發現一個重大的問題,SwissEphNet讀文件是調用一個事件,然後在這個事件用返回一個文件流,然後在這個文件流又返回給一個包裝的CFile,然後CFile又返回給一另外的對象,更糟糕的是它層層迭代後,弄得一片混亂,有地方沒有對流進行Dispose,因為沒有釋放資源就導致了在多線程訪問時,會提示文件已經被其它進程佔用。
 

因為其調用代碼簡直是滿目瘡痍,混亂一片,無法從內部進行修改,所以就採用了取巧的方法解決,每次創建一個CFILE對象時,就將它註冊到一個字典裡,並將當前的流記錄下來,遇到再次訪問相同文件時,就去反查該文件的流,並進行Dispose釋放,然後重新創建CFile對象,如此暫時解決了問題。

推測應該是內存回收管理機制的問題,因為包裝引用太多,雖然在代碼中進行Dispose了,但仍然有地方可能有牽扯不清的引用,導致它不能指針變空,結果就導致了流無法翻譯。

本文由 三符道長 撰於 2016年7月6日。轉載請註明出處。