我正在研究一个应用程序,它使用一堆外部DLL来连接某个服务器。奇怪的是,这些DLL的暴露方法允许连接但不是断开连接或关闭。这些库工作正常,除非您在一个块中对服务器进行大量后续调用,因此我决定在X次调用后断开连接并重新连接。
然而,这就是问题所在。我无法断开连接,因为没有给出断开方法。所以我的问题是,我怎样才能彻底杀死这个非托管对象,以便我可以重新创建它?
答案 0 :(得分:1)
如果您在C#中使用非托管资源,您应该让您的类使用实现IDisposable
的非托管资源并与之交互,并使用using
块创建和销毁它们。
如果您无法断开连接,具体取决于您正在连接的内容,有时将包含非托管资源的变量设置为null将清除其中一些内容。但实际上,如果没有适当的断开连接/处置方法,你就无法做很多事情。
答案 1 :(得分:0)
您可以手动关闭与服务器的基础连接。我不知道如何在不了解您消费的服务(HTTP TCP等)的情况下如何做到这一点。你可以跟踪(像wireshark),看看正在传输什么。
虽然底线是他们的软件坏了。你能联系供应商吗?
答案 2 :(得分:0)
我能找到的最佳解决方案是在它自己的线程中运行对外部DLL的每次调用,最终在线程结束时被杀死。鉴于我无法访问更新的DLL,这是唯一有效的解决方案。