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 mode
blocking
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. |