当.net应用程序(非Web应用程序)崩溃时,非托管资源(如数据库连接,打开文件,...)会发生什么?
答案 0 :(得分:1)
这取决于资源以及该资源的端点如何处理它。对于数据库连接,数据库服务器将监听并等待任何消息,无论它被配置为等待(可能不是很长),然后终止套接字。文件可能会陷入锁定(“被另一个进程使用”)状态,但IME非常罕见。
答案 1 :(得分:1)
当本机(C / C ++ / etc)应用程序崩溃时会发生同样的事情。
在大多数情况下,操作系统会立即清理。它将关闭文件句柄,互斥体,网络连接以及操作系统负责的任何其他内容。
对于操作系统未提供的其他资源(例如与SQL服务器的连接),由哪个软件负责该资源。正如Rex M所提到的,SQL服务器将坐在那里直到连接超时,然后它将释放它,但其他第三方软件可能采取不同的行动。
如果你从一个糟糕的第三方软件中获取一些非托管资源,这可能会导致问题,因为它可能不够智能,不能使用超时或类似的机制,而非托管资源可能永远不会被释放。
如果您的第三方软件超时很长,它也会导致问题。例如,如果SQL Server连接超时为20分钟,并且您在2分钟内崩溃了20次,那么您将有20个“用完”连接,直到超时发生。通过做这种事情,你可以让自己摆脱困境。