Indukált gyűjtemények

A legtöbb esetben a szemétgyűjtő meg tudja határozni a gyűjtemény végrehajtásának legjobb idejét, és hagyja, hogy függetlenül fusson. Ritkán fordul elő, hogy egy kényszerített gyűjtemény javíthatja az alkalmazás teljesítményét. Ezekben az esetekben a szemétgyűjtést a GC.Collect módszer használatával kényszerítheti a szemétgyűjtésre.

Akkor használja ezt a GC.Collect módszert, ha az alkalmazás kódjának egy adott pontján jelentősen csökken a felhasznált memória mennyisége. Ha például az alkalmazás összetett párbeszédpanelt használ, amely több vezérlővel rendelkezik, a párbeszédpanel bezárásakor történő hívás Collect javíthatja a teljesítményt a párbeszédpanel által használt memória azonnali visszanyerésével. Győződjön meg arról, hogy az alkalmazás nem túl gyakran hoz létre szemétgyűjtést, mert ez csökkentheti a teljesítményt, ha a szemétgyűjtő nem optimális időpontban próbál objektumokat visszanyerni. GCCollectionMode.Optimized Enumerálási értéket adhat meg a Collect metódusnak, amelyet csak akkor gyűjthet össze, ha a gyűjtés hatékony lenne, ahogy azt a következő szakaszban tárgyaljuk.

GC-gyűjtemény mód

A kényszerített gyűjtemény viselkedésének megadásához használhatja az GC.Collect egyik olyan metódust, amely egy értéket tartalmaz GCCollectionMode .

GCCollectionMode Érték Leírás
Default A .NET futó verziójához az alapértelmezett szemétgyűjtési beállítást használja.
Forced A szemétgyűjtést azonnal kényszeríti. Ez egyenértékű a túlterhelés meghívásával GC.Collect() . Ez az összes generáció teljes blokkolását eredményezi.

A nagyméretű objektum halomba tömörítéséhez állítsa be a GCSettings.LargeObjectHeapCompactionMode tulajdonságot GCLargeObjectHeapCompactionMode.CompactOnce a teljes szemétgyűjtés azonnali blokkolása előtt.
Optimized Lehetővé teszi a szemétgyűjtő számára annak megállapítását, hogy az aktuális idő optimális-e az objektumok visszanyeréséhez.

A szemétgyűjtő megállapíthatja, hogy egy gyűjtemény nem lenne elég hatékony ahhoz, hogy igazolható legyen, ebben az esetben objektumok visszanyerése nélkül tér vissza.

Gyűjtemények háttere vagy letiltása

A metódus túlterhelésének GC.Collect(Int32, GCCollectionMode, Boolean) meghívásával megadhatja, hogy egy indukált gyűjtemény blokkolja-e vagy sem. A végrehajtott gyűjtemény típusa a metódus mode és blocking a paraméterek kombinációjától függ. mode az enumerálás tagja GCCollectionMode , és blocking egy Boolean érték. Az alábbi táblázat az és az argumentumok interakcióját modeblocking foglalja össze.

mode blocking = true blocking = false
Forced vagy Default A blokkolási gyűjteményt a lehető leghamarabb végrehajtjuk. Ha egy háttérgyűjtemény folyamatban van, és a létrehozás 0 vagy 1, a Collect(Int32, GCCollectionMode, Boolean) metódus azonnal aktivál egy blokkolási gyűjteményt, és a gyűjtemény befejezésekor ad vissza. Ha egy háttérgyűjtemény folyamatban van, és a generation paraméter 2, a metódus megvárja, amíg a háttérgyűjtemény befejeződik, elindít egy blokkoló 2. generációs gyűjteményt, majd visszaadja. A gyűjteményt a lehető leghamarabb végrehajtjuk. A Collect(Int32, GCCollectionMode, Boolean) metódus háttérgyűjteményt kér, de ez nem garantált; a körülményektől függően előfordulhat, hogy a zárolási gyűjtemény továbbra is elvégezhető. Ha egy háttérgyűjtemény már folyamatban van, a metódus azonnal visszatér.
Optimized A szemétgyűjtő állapotától és generation a paramétertől függően blokkoló gyűjtést is lehet végezni. A szemétgyűjtő megpróbálja optimális teljesítményt nyújtani. A szemétgyűjtő állapotától függően gyűjtést is lehet végezni. A Collect(Int32, GCCollectionMode, Boolean) metódus háttérgyűjteményt kér, de ez nem garantált; a körülményektől függően előfordulhat, hogy a zárolási gyűjtemény továbbra is elvégezhető. A szemétgyűjtő megpróbálja optimális teljesítményt nyújtani. Ha egy háttérgyűjtemény már folyamatban van, a metódus azonnal visszatér.

Lásd még