在C#中销毁非托管对象

时间:2012-08-09 11:53:54

标签: c# unmanaged

我正在研究一个应用程序,它使用一堆外部DLL来连接某个服务器。奇怪的是,这些DLL的暴露方法允许连接但不是断开连接或关闭。这些库工作正常,除非您在一个块中对服务器进行大量后续调用,因此我决定在X次调用后断开连接并重新连接。

然而,这就是问题所在。我无法断开连接,因为没有给出断开方法。所以我的问题是,我怎样才能彻底杀死这个非托管对象,以便我可以重新创建它?

3 个答案:

答案 0 :(得分:1)

如果您在C#中使用非托管资源,您应该让您的类使用实现IDisposable的非托管资源并与之交互,并使用using块创建和销毁它们。

如果您无法断开连接,具体取决于您正在连接的内容,有时将包含非托管资源的变量设置为null将清除其中一些内容。但实际上,如果没有适当的断开连接/处置方法,你就无法做很多事情。

答案 1 :(得分:0)

您可以手动关闭与服务器的基础连接。我不知道如何在不了解您消费的服务(HTTP TCP等)的情况下如何做到这一点。你可以跟踪(像wireshark),看看正在传输什么。

虽然底线是他们的软件坏了。你能联系供应商吗?

答案 2 :(得分:0)

我能找到的最佳解决方案是在它自己的线程中运行对外部DLL的每次调用,最终在线程结束时被杀死。鉴于我无法访问更新的DLL,这是唯一有效的解决方案。