Posso impedire a Garbage Collector di interrompere alcuni dei miei thread?
-
08-07-2019 - |
Domanda
È possibile in un'applicazione Compact Framework impedire al garbage collector di arrestare incondizionatamente almeno uno dei thread o bloccare le raccolte GC almeno in alcune parti del codice?
Penso che abbia a che fare con la definizione di priorità in tempo reale, ma ho trovato molti consigli contro farlo.
Soluzione
Il GC deve congelare tutti i thread per poter ispezionare tutti gli oggetti. Come potrebbe fare il suo lavoro, se qualche thread è in esecuzione e sta modificando / creando un oggetto?
Meglio non farlo.
Quello che puoi fare su Thogh, è invocare GC.Collect () e GC.WaitForPendingFinalizers () prima di entrare in uno stato in cui non vuoi essere interrotto. Questo ti darà del tempo.
Altri suggerimenti
Il codice non gestito non è autorizzato ad accedere agli oggetti gestiti non accoppiati, ma verrà eseguito senza blocco durante la garbage collection. Se hai determinate routine che devono continuare a funzionare durante la garbage collection e non richiedono l'accesso a oggetti gestiti non accoppiati, potresti scrivere quelle routine in codice non gestito e il GC non le influenzerebbe.