第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C# 終結(jié)器未釋放非托管內(nèi)存

C# 終結(jié)器未釋放非托管內(nèi)存

C#
函數(shù)式編程 2022-09-04 16:23:27
我有一個類,它通過分配一個內(nèi)存塊。該類實現(xiàn),我已將其設置為在類最終確定時自動釋放分配的內(nèi)存。但是,它似乎未按預期工作。MappedMemoryMarshal.AllocHGlobal()IDisposableclass MappedMemory : IDisposable{    private bool disposed_ = false;    private IntPtr memoryPtr_;    public MappedMemory( int capacity )    {      memoryPtr_ = Marshal.AllocHGlobal( capacity );    }    ~MappedMemory()    {      Dispose( false );    }    public void Dispose()    {      Dispose( true );      GC.SuppressFinalize( this );    }    protected virtual void Dispose( bool disposing )    {      if ( !disposed_ )      {        if ( disposing )        {          // Clear managed resources        }        Marshal.FreeHGlobal( memoryPtr_ );      }      disposed_ = true;    }}我已經(jīng)編寫了兩個測試來確保內(nèi)存被正確釋放:public MappedMemory_finalizer_frees_memory(){  for( var i = 0; i < 1e8; i++ )  {    var memory = new MappedMemory( 128 );  }}public MappedMemory_dispose_frees_memory(){  for( var i = 0; i < 1e8; i++ )  {    var memory = new MappedMemory( 128 );    memory.Dispose();  }}運行測試時,手動調(diào)用的測試將按預期工作,并且內(nèi)存保持恒定利用率。Dispose()但是,終結(jié)器的測試似乎沒有釋放分配的內(nèi)存,并且在內(nèi)存耗盡之前會失控泄漏。我設置了一個斷點,并且命中了對的調(diào)用。Marshal.FreeHGlobal( memoryPtr_ )手動添加到測試中可以解決問題,因此最終看起來內(nèi)存已解除分配,但未被垃圾回收?GC.Collect()我對這里發(fā)生的事情感到非常困惑。有人可以解釋為什么終結(jié)器不能釋放內(nèi)存,以及我如何確保它在生產(chǎn)中釋放內(nèi)存嗎?
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

從 MSDN 文檔中,此處為:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/destructors

程序員無法控制何時調(diào)用終結(jié)器,因為這是由垃圾回收器確定的。垃圾回收器檢查應用程序不再使用的對象。如果它認為某個對象符合完成條件,它將調(diào)用終結(jié)器(如果有)并回收用于存儲該對象的內(nèi)存。

正如您所說,強制垃圾回收會釋放內(nèi)存,我懷疑您看到的問題是內(nèi)存系統(tǒng)上沒有足夠的壓力來導致垃圾回收自動運行。垃圾回收是一個相對昂貴的過程,因此除非有理由這樣做,否則它不會運行。


查看完整回答
反對 回復 2022-09-04
  • 1 回答
  • 0 關注
  • 137 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號