Gc.GetGeneration 可能會傳回 Int32.MaxValue
從 .NET 8 開始,GC.GetGeneration 可能會針對非 GC 堆積上配置的物件傳回 Int32.MaxValue (也稱為「凍結」堆積),其中先前傳回 2。 執行階段在非 GC 堆積上配置物件的時機和方式是內部實作詳細資料。 例如,字串常值是在非 GC 堆積上配置,而下列方法呼叫可能會傳回 Int32.MaxValue。
int gen = GC.GetGeneration("string");
先前的行為
先前,GC.GetGeneration 傳回 0-2 範圍內的整數值。
新的行為
從 .NET 8 開始,GC.GetGeneration 可以傳回 0、1、2 或 Int32.MaxValue 值。
導入的版本
.NET 8 Preview 4
中斷性變更的類型
此變更為行為變更。
變更原因
.NET 引進了新的非 GC 堆積類型,其與現有堆積稍有不同,現有堆積為大型物件堆積 (LOH)、小型物件堆積 (SOH),以及釘選的物件堆積 (POH)。
建議的動作
請確定您並未使用來自 GC.GetGeneration()
的傳回值做為陣列索引子,或用於任何其他未預期的 Int32.MaxValue。
受影響的 API
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應