Dll ProLUN服务器在几秒钟后崩溃

Dll ProLUN服务器在几秒钟后崩溃,dll,procrun,Dll,Procrun,我有一个web应用程序,使用SpringBoot。现在,此应用程序需要使用自定义dll(内部构建dll文件)。这个dll没有任何问题,因为我们在其他应用程序上使用它,并且没有任何问题 为了在我正在编写的这个新web应用程序中加载库,我已经将dll文件添加到了procrun目录中。此目录位于库路径上,因此有意义 在启动过程中,我输入代码立即加载dll,并测试它的一些功能。这个很好用 但是,我有一个计时器,它安排一些函数的执行,这些函数可能包括也可能不包括对dll的函数调用 在执行大约10分钟后的某

我有一个web应用程序,使用SpringBoot。现在,此应用程序需要使用自定义dll(内部构建dll文件)。这个dll没有任何问题,因为我们在其他应用程序上使用它,并且没有任何问题

为了在我正在编写的这个新web应用程序中加载库,我已经将dll文件添加到了procrun目录中。此目录位于库路径上,因此有意义

在启动过程中,我输入代码立即加载dll,并测试它的一些功能。这个很好用

但是,我有一个计时器,它安排一些函数的执行,这些函数可能包括也可能不包括对dll的函数调用

在执行大约10分钟后的某个时刻,服务意外地停止了,而且似乎没有任何正当的理由

尽管我在代码中适当的逻辑位置尝试/捕获异常,但没有打印相关的日志条目

事件日志显示了一些提醒我空指针异常的内容:

另一个麻烦是事件日志将打印有关dll\u卸载的内容。(见图)

我需要一些帮助,找出服务失败/停止的原因。 亲切的问候

编辑:经过大约三天的调试和挠头,我遇到了一个论坛帖子,解释说这个问题与系统在垃圾收集期间释放内存的方式有关。看起来问题中的dll被垃圾回收器卸载了,尽管它在以后的某个时候仍然可以被调用——这当然是服务崩溃的原因


为了解决这个问题,我加入了一个计时器,它将每隔三分钟调用dll中的一个方法(在我的系统上,这不会影响性能)。我知道这个解决方案是一个黑客,但它对我有效

既然您正在谈论垃圾收集器:您的应用程序或此DLL是否可能是您不知道的非托管代码?您好@WillyK。非托管代码是什么意思?据我所知,所有代码,甚至DLL都是内部编写的(由我们的团队自己编写)。像.NET应用程序这样的“托管代码”的主要目的是尽量减少典型的编程错误。在这种情况下,我考虑内存管理器,它可能会将数据移动到内存中的另一个位置。常见的Windows API,如CreateFile(来自kernel32.dll)是不在.NET Framework的“授权”下运行的“本机代码”。这就是我们所说的非托管代码。您可以在托管.应用程序中使用非托管代码,但需要确保数据不会在内存中移动。另见