![](/img/trans.png)
[英]Do i need to Dispose Stream when i Pass it to IDisposable class?
[英]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.