Czytam o CUI zbieracza i jak CLR buduje wykresy obiektów. Odniesienia Rozdział różne korzenie, które mogą być aktywne dla obiektu:C# Garbage Collection Active Root
• Odniesienia do globalnych obiektów (choć te są niedozwolone w C#, CIL kod robi alokacji pozwoleń globalnych obiektów)
• Odniesienia do dowolnego statyczne obiekty/statycznych pól
• Odniesienia do lokalnych obiektów w bazie kodu źródłowego aplikacji
• Odsyłacze do sprzeciwu parametry przekazane do metody
• odwołań do obiektów czeka na fina lized (opisany w dalszej części tego rozdziału)
• Dowolny rejestrze procesora, która odwołuje obiekt
Zastanawiałem się, czy ktoś może podać przykłady tych korzeni w kodzie?
Dzięki
W tym momencie 'bar' może faktycznie być kolekcjonowany w trybie zwolnienia, ponieważ nie jest on przywoływany po przerwie. –
Brian ma rację, 'bar' będzie utrzymywany przy życiu tylko w * trybie debugowania * na pewno do końca metody Main, która służy wyłącznie do debugowania wygody - w trybie wydania' bar' może zostać zebrany. – BrokenGlass
Wierzę, że jeśli używasz DEBUG, obiekty są zawsze bezpieczne, dopóki funkcja się nie zakończy. Uważam jednak, że masz zoptymalizowany kod. –