2009-11-03 73 views

回答

1

这取决于资源,以及如何在非托管资源该资源的端点处理它。对于数据库连接,数据库服务器将侦听并等待任何消息,只要它被配置为等待(可能不是很长),然后终止套接字。文件可能会陷入锁定状态(“被另一个进程使用”),但是IME极其罕见。

1

当原生(C/C++/etc)应用程序崩溃时会发生同样的情况。

大多数情况下,操作系统会立即清理。它将关闭文件句柄,互斥锁,网络连接以及操作系统负责的其他任何东西。

对于操作系统未提供的其他资源(例如连接到SQL服务器),取决于哪一部分软件负责该资源。正如Rex M提到的那样,SQL服务器将在那里等待连接超时,然后它将释放它,但其他第三方软件的行为可能会有所不同。

如果您从一块蹩脚的第三方软件中获得一些非托管资源,可能会导致问题,因为它可能不够聪明,无法使用超时或类似机制,并且非托管资源可能永远无法释放。

如果您的第三方软件超时,它也会导致问题。例如,如果SQL服务器连接超时时间为20分钟,并且在2分钟内崩溃了20次,那么您将有20个“用完”连接,直到超时发生。你可以通过做这种事情来摆脱关系。

相关问题