我有一个使用 Spring-Boot 的 Web 应用程序。现在需要此应用程序使用自定义 dll(内部构建 dll 文件)。这个 dll 没有任何问题,因为我们在其他应用程序上使用它,并且没有任何问题。
为了在我正在编写的这个新 Web 应用程序中加载库,我已将 dll 文件添加到 procrun 目录中。这个目录在库路径上,所以这是有道理的。
在启动期间,我输入代码以立即加载 dll,并测试其一些功能。这工作正常。
但是,我有一个计时器,可以安排一些函数的执行,这些函数可能包括也可能不包括对 dll 的函数调用。
在某个时间点,大约在执行 10 分钟左右,服务意外停止,似乎没有任何正当理由。
尽管我在代码中的适当逻辑位置尝试/捕获异常,但没有打印相关的日志条目。
另一个面包屑是事件日志将打印有关 dll_unload 的内容。(见图)
我需要一些帮助来找出服务失败/停止的原因。亲切的问候。
编辑:经过大约三天的调试和挠头后,我遇到了一个论坛帖子,该帖子解释说这个问题与系统在垃圾收集期间释放内存的方式有关。似乎有问题的 dll 正在被垃圾收集器卸载,即使它仍然可以在稍后的某个时间调用 - 这当然是服务失败的原因。
为了解决这个问题,我放入了一个计时器,它会每隔三分钟调用 dll 中的一个方法(在我的系统上,这不会影响性能)。我知道这个解决方案是一个 hack,但它对我有用。