Question

Est-il possible, dans une application Compact Framework, d'empêcher le récupérateur de mémoire d'arrêter inconditionnellement au moins un des threads, ou de bloquer les collectes GC au moins dans certaines parties du code?

Je pense qu'il faut régler les priorités en temps réel, mais j'ai trouvé beaucoup de conseils pour ne pas le faire.

Était-ce utile?

La solution

Le CPG doit geler tous les threads pour pouvoir inspecter tous les objets. Comment pourrait-il faire son travail, si un thread est en cours d'exécution et modifie / crée un objet?

Mieux vaut ne pas le faire.

Pour ce faire, vous devez appeler GC.Collect () et GC.WaitForPendingFinalizers () avant d’entrer dans un état dans lequel vous ne souhaitez pas être interrompu. Cela vous donnera un peu de temps.

Autres conseils

Le code non managé n'est pas autorisé à accéder aux objets gérés non épinglés, mais il s'exécutera sans blocage pendant le garbage collection. Si vous avez certaines routines qui doivent continuer à s'exécuter pendant la récupération de place et qu'elles n'ont pas besoin d'accéder à des objets gérés non épinglés, vous pouvez les écrire en code non managé sans que le CPG ne les affecte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top