SwissEphNet

SwissEphNet

为了尝试能够实现Windows上开发,Linux上运行,所以采用了Asp.net core,然而在使用SwissEphNet时,发现一个重大的问题,SwissEphNet读文件是调用一个事件,然后在这个事件用返回一个文件流,然后在这个文件流又返回给一个包装的CFile,然后CFile又返回给一另外的对象,更糟糕的是它层层迭代后,弄得一片混乱,有地方没有对流进行Dispose,因为没有释放资源就导致了在多线程访问时,会提示文件已经被其它进程占用。
 

因为其调用代码简直是满目疮痍,混乱一片,无法从内部进行修改,所以就采用了取巧的方法解决,每次创建一个CFILE对象时,就将它注册到一个字典里,并将当前的流记录下来,遇到再次访问相同文件时,就去反查该文件的流,并进行Dispose释放,然后重新创建CFile对象,如此暂时解决了问题。

推测应该是内存回收管理机制的问题,因为包装引用太多,虽然在代码中进行Dispose了,但仍然有地方可能有牵扯不清的引用,导致它不能指针变空,结果就导致了流无法翻译。

三符风云涌

发表评论