引發的集合

大部分情況下,記憶體回收行程會判斷執行回收的最佳時間,請讓記憶體回收行程獨立執行。 在罕見的情況下,強制回收可能會改善您應用程式的效能。 在這些情況下,您可以使用 GC.Collect 方法強制進行記憶體回收,來引發記憶體回收。

在應用程式碼特定位置所使用的記憶體數量大幅下降時,請使用 GC.Collect 方法。 例如,如果您的應用程式使用具有數個控制項的複雜對話方塊,則在關閉對話方塊時呼叫 Collect 可透過立即回收對話方塊所使用的記憶體來改善效能。 請確定您的應用程式沒有太頻繁地進行記憶體回收,原因是如果記憶體回收行程嘗試在非最佳時間回收物件,則這樣可能會降低效能。 您可以將 GCCollectionMode.Optimized 列舉值提供給 Collect 方法,只在回收具備生產力時才進行回收 (如下節所討論)。

GC 收集模式

您可以使用其中一個 GC.Collect 方法多載,其包含 GCCollectionMode 值來指定強制回收行為,如下所示。

GCCollectionMode 描述
Default 使用 .NET 執行版本的預設記憶體回收設定。
Forced 強制立即進行記憶體回收。 這等於呼叫 GC.Collect() 多載。 它會導致完整封鎖回收所有層代。

您也可以在強制執行立即的完整區塊記憶體回收之前,透過將 GCSettings.LargeObjectHeapCompactionMode 屬性設定為 GCLargeObjectHeapCompactionMode.CompactOnce 來壓縮大型物件。
Optimized 可讓記憶體回收行程判斷目前時間是否最適合回收物件。

記憶體回收行程可能會判斷回收的生產力不足無法進行調整,在此情況下會返回,而不是回收物件。

背景或封鎖回收

您可以呼叫 GC.Collect(Int32, GCCollectionMode, Boolean) 方法多載,來指定是否封鎖引發的回收。 執行的回收類型取決於方法的 modeblocking 參數組合。 mode 不是 GCCollectionMode 列舉的成員,且 blockingBoolean 值。 下表摘要說明 modeblocking 引數的互動。

mode blocking = true blocking = false
ForcedDefault 會盡快執行封鎖回收。 如果正在進行背景回收,而且層代是 0 或 1,則 Collect(Int32, GCCollectionMode, Boolean) 方法會立即觸發封鎖回收,並在回收完成時返回。 如果正在進行背景回收,而且 generation 參數是 2,則方法會等到背景回收完成,並觸發封鎖層代 2 回收,然後返回。 會盡快執行回收。 Collect(Int32, GCCollectionMode, Boolean) 方法會要求背景集合,但不保證可取得。視情況而定,可能仍會執行封鎖集合。 如果已在進行背景回收,則這個方法會立即返回。
Optimized 可能會因記憶體回收行程和 generation 參數的狀態而執行封鎖集合。 記憶體回收行程會嘗試提供最佳效能。 根據記憶體回收行程的狀態,可能會執行回收。 Collect(Int32, GCCollectionMode, Boolean) 方法會要求背景集合,但不保證可取得。視情況而定,可能仍會執行封鎖集合。 記憶體回收行程會嘗試提供最佳效能。 如果已在進行背景回收,則這個方法會立即返回。

另請參閱