簡體   English   中英

我是否需要處置與應用程序本身具有相同生存期的IDisposable?

[英]Do I need to dispose IDisposable that have the same lifetime as the application itself?

我有一個IDiposable對象,該對象“永遠”存在於應用程序中。 就我而言,這是SemaphoreSlim ,但問題實際上適用於可以處置的任何對象。

我肯定知道只要應用程序運行,我就需要一個對象。 所以問題是:在流程結束時,我是否真的需要確保將其處置或釋放所有非托管資源? (如果重要的話,Windows和Linux都可以)。

處置的問題是,我的信號量在堆棧中很深,從理論上講,這意味着我的整個對象堆棧都必須實現IDisposable ,因為某個地方確實沒有需要處置的信號量。

我想避免但不確定后果。

我有一個IDiposable對象,該對象在應用程序中永久存在

那么,如果它必須生存到應用程序生命周期,那么處置的問題在哪里呢? 而是在應用程序結束或回收時的運行時釋放它。

進程結束后,所有非托管資源都將被釋放嗎?

是的,一旦您的應用程序結束(進程結束),它們就被釋放了,但是直到那時候資源才坐在那里,占用了內存(但這就是您的要求)

所有OS級別的對象都會隨着進程終止而釋放。 這是由OS保證的,對於Windows和Linux操作系統都是如此。 此外,具有正確實現的處置模式的IDispisable具有故障保護機制,該機制可確保在定稿過程中回收非托管資源。 但是,此過程有一些局限性(特別是要給終結器以有限的時間完成)。 因此,在最壞的情況下,您可以確保不受管理的資源不會超過您的流程。 當然,最好不要讓它們處於無人值守狀態,因為在系統忽略資源回收的情況下,這可能導致資源和內存泄漏,但對於壽命等於應用程序生存期的單個資源,這是例外情況,因此可以接受。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM