2014-09-15 2 views
0

J'ai une opération qui doit être exécutée de manière fiable dans son ensemble ou ne pas être effectuée du tout.Les URCE sont-elles nécessaires uniquement pour protéger les états gérés partagés dans un AppDomain?

  1. L'objectif est uniquement de préserver la cohérence de certains états partagés gérés en mémoire.
  2. Ces états sont contenus dans un domaine d'application. Ils ne sont pas visibles en dehors de ce domaine.
  3. Je n'ai donc pas à réagir lorsque le domaine ou le processus sont arrêtés.
  4. J'écris une bibliothèque de classes et l'utilisateur peut appeler mon code de n'importe où. Cependant, mon code n'appelle aucun code utilisateur, pas même les méthodes virtuelles.
  5. Le CLR peut être hébergé.


À ma connaissance, je ne pas besoin régions d'exécution limitée (CER) depuis:

  1. CER ne sont nécessaires contre l'infâme OutOfMemoryException, ThreadAbortException et StackOverflowException.
  2. Mon code ne fait aucune allocation, donc je ne me soucie pas de OutOfMemory (de toute façon les allocations ne doivent pas être faites dans un CER).
  3. Si un débordement de pile se produit, le processus sera de toute façon interrompu (ou le domaine dans certains scénarios hébergés).
  4. Les interruptions de thread sont déjà retardées jusqu'à la fin d'un bloc finally et mon code est déjà dans un.


Ai-je raison sur ces points? Voyez-vous d'autres raisons pour lesquelles je devrais avoir besoin de CER?

Répondre

0

J'ai finalement trouvé au moins une raison pour laquelle un CER est toujours nécessaire: même si mon code n'effectue aucune allocation, le compilateur JIT peut devoir allouer de la mémoire à la première exécution.

Par conséquent, la mise en place d'un CER est nécessaire pour forcer le runtime à JIT et prévenir un éventuel MOO.

Questions connexes