2009-11-03 101 views

回答

1

這取決於資源,以及如何在非託管資源該資源的端點處理它。對於數據庫連接,數據庫服務器將偵聽並等待任何消息,只要它被配置爲等待(可能不是很長),然後終止套接字。文件可能會陷入鎖定狀態(「被另一個進程使用」),但是IME極其罕見。

1

當原生(C/C++/etc)應用程序崩潰時會發生同樣的情況。

大多數情況下,操作系統會立即清理。它將關閉文件句柄,互斥鎖,網絡連接以及操作系統負責的其他任何東西。

對於操作系統未提供的其他資源(例如連接到SQL服務器),取決於哪一部分軟件負責該資源。正如Rex M提到的那樣,SQL服務器將在那裏等待連接超時,然後它將釋放它,但其他第三方軟件的行爲可能會有所不同。

如果您從一塊蹩腳的第三方軟件中獲得一些非託管資源,可能會導致問題,因爲它可能不夠聰明,無法使用超時或類似機制,並且非託管資源可能永遠無法釋放。

如果您的第三方軟件超時,它也會導致問題。例如,如果SQL服務器連接超時時間爲20分鐘,並且在2分鐘內崩潰了20次,那麼您將有20個「用完」連接,直到超時發生。你可以通過做這種事情來擺脫關係。

相關問題