Limitation de la taille du segment de mémoire géré dans une application C #

Puis-je configurer mon application C # pour limiter sa consommation de mémoire à 200 Mo, par exemple? IOW, je ne veux pas attendre le GC automatique (ce qui semble permettre au tas de se développer beaucoup plus que ce dont a réellement besoin cette application).

Je sais qu’en Java, il existe un commutateur de ligne de commande que vous pouvez transmettre à la machine virtuelle Java pour y parvenir. Existe-t-il un équivalent en C #?

ps

Je sais que je peux invoquer le GC à partir de code, mais je préférerais ne pas le faire périodiquement. Je préfère le régler une fois au démarrage et l’oublier.

Je ne suis pas au courant de telles options pour le CLR normal. J’imagine que vous pouvez contrôler cela si vous implémentez votre propre hôte CLR.

Cependant, je ne partage pas votre opinion sur la croissance du tas. Le tas grandit parce que votre application alloue et conserve des objects.

Vous pouvez faire plusieurs choses pour limiter l’utilisation de la mémoire. Veuillez consulter cette question pour quelques informations: Réduire l’utilisation de la mémoire des applications .NET?

Le gestionnaire de mémoire permet à l’hôte de fournir une interface par laquelle le CLR demande toutes les allocations de mémoire. Il remplace à la fois les API de mémoire Windows® et les routines d’allocation standard du C-CLR. De plus, l’interface permet au CLR d’informer l’hôte des conséquences de l’échec d’une allocation particulière (par exemple, l’échec d’une allocation de mémoire à partir d’un thread contenant un verrou peut avoir certaines conséquences sur la fiabilité). Cela permet également à l’hôte de personnaliser la réponse du CLR à une allocation échouée, allant d’une exception OutOfMemoryException renvoyée tout au long du processus en cours de démolition. L’hôte peut également utiliser ce gestionnaire pour recapturer la mémoire du CLR en déchargeant les domaines d’application inutilisés et en forçant le garbage collection. Les interfaces du gestionnaire de mémoire sont répertoriées dans

Source et plus: http://msdn.microsoft.com/en-us/magazine/cc163567.aspx#S2

Modifier :

En fait, je ne vous recommanderais pas de gérer vous-même la mémoire, car plus vous y entrez, plus vous rencontrerez de problèmes, mais CLR remplit parfaitement cette mission.

Mais si vous dites que c’est très important pour moi de gérer les choses moi-même, alors je ne peux rien.

Je n’ai pas essayé cela, mais vous pouvez appeler SetProcessWorkingSetSizeEx en lui passant les indicateurs appropriés pour vous assurer que votre processus ne reçoit jamais plus de mémoire. Je ne sais pas si le GC en tiendra compte et procédera à des nettoyages plus fréquents, ou si vous obtiendrez simplement OutOfMemoryExceptions.