L'utilisation de la mémoire en C#
J'ai un programme qui utilise des threads en C#. Est-il un moyen de savoir par programmation l'utilisation de la mémoire de l'application? Je veux limiter la ponte de fils-à-dire 10 méga-octets de mémoire, comment dois-je procéder?
- De la minute où vous commencez en bas de la route pour le contrôle de la mémoire est la minute où vous commencez à faire une erreur. Si vous avez des EXIGENCES pour mémoire, n'utilisez pas .NET. Si vous n'avez pas d'exigences, de cesser de s'inquiéter de la mémoire. .NET gère la mémoire mieux que vous ne le pourrait jamais. L'arrêter. Le laisser seul. Pas de. Mauvais. Stop.
- Je suis d'accord avec vous. Aussi longtemps que vos objets référencés sont en dessous de 2 go de mémoire sur un système 32 bits, laissez-le GC de la gérer.
- Pourquoi est-ce mauvais? Si pas .NET, alors quoi d'autre aurait-elle être utilisée?
- Son mauvais parce que le GC est spécialement optimisé et testé pour gérer la mémoire, par des gens de lettres comme de Doctorat d'après leurs noms. Êtes-vous un expert dans la gestion de la mémoire? La seule garantie que vous avez est que ce que vous faites sera moins efficace que la GC, ce qui signifie que vous battez votre propre but. L'arrêter.
- Si vous avez des exigences en matière de mémoire ne sont pas BS ou ne peuvent pas être gérées à l'écart (HURR DURR REGARDER TOUTE LA MÉMOIRE de PROGRAMME UR PREND DANS le GESTIONNAIRE des TÂCHES HURR DURR), alors vous avez besoin de coder en C++ ou en C, à quelque chose près le fil qui VOUS permet de contrôler l'allocation de la mémoire. Personnellement, je suis pour dire que F bruit.
- Je pense que vous avez besoin de renforcer votre question avec le raisons pourquoi vous voulez cette limite. Si vous dites le 10 mo par thread, malgré le nombre de threads en cours de création alors je suis d'accord avec ce qui est mauvais.
- OTH vous disposez d'un service de l'app que vous voulez éviter d'être un dévoreur de mémoire alors vous avez besoin, en l'état, je ne pense pas qu'une telle exigence est déraisonnable et ce n'est pas le travail de la GC de limiter la demande pour la mémoire.
- Je ne pense pas qu'il essaie de gérer sa mémoire en ce qui concerne à faire de chaque fil de 10 mo ou moins. Je pense qu'il essaie de gérer le nombre de fils engendré, tels que son processus ne dépasse pas 10 mo, ce qui je pense est une demande juste. C'est à lui de décider si sa demande le justifie.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez la mémoire de l'ensemble du processus en cours d'exécution et non pas par thread, que diriez-vous:
Il y a une foule d'autres processus de la mémoire propriétés d'ailleurs
WorkingSet64
découvrez le "liée à la mémoire de" ceux sur le lien suivant pour celui qui conviennent le mieux àhttp://msdn.microsoft.com/en-us/library/system.diagnostics.process_properties.aspx
Alors que je suis d'accord avec les commentaires que vous avez déjà reçu votre question, l'utilisation de
System.Environment.WorkingSet
pourrait peut-être avoir une réponse réelle à elle si vous avez vraiment décidé de prendre ce cours de l'action?Que je suis avec vous et Steve, ne pas le faire sauf si vous devez VRAIMENT le faire . . . qui a dit . . .
si vous avez vraiment besoin de le faire, vous pouvez utiliser le .Net Api D'Hébergement ils sont là alors applications comme SQL Server peut héberger le .net framework au sein de l'application.
Il vous donne le contrôle sur la gestion de la mémoire, etc, j'ai lu l'article, mais jamais utilisé l'API, ils sont sur ma liste de choses à faire pour certains, la nuit quand je m'ennuie, et aucun de mes autres "fun" des projets, envie de plaisir cette semaine 🙂
Espère que cette aide.
L'on ne mesure pas le nombre de threads dans l'utilisation de la mémoire. Plutôt, prendre en compte le nombre de "processeurs" (SMP /Multi-Coeurs /Hyper-Threading) pour décider combien de threads doit s'exécuter en parallèle. Ou utiliser le ThreadPool, qui est de taille automatiquement afin d'obtenir un bon thread-à-CPU ratio.