Je voudrais écrire le code suivant en C #. a) Application de petite console qui simule une fuite de mémoire. b) Application de la petite console qui invoquerait la demande ci-dessus et libérerait immédiatement simuler la gestion de la gestion de la mémoire. P>
En d'autres termes, l'application (B) appellerait et publierait en permanence une application (a) pour simuler la manière dont l'application de fuites de mémoire "rebelle" est contenue à la sortie de la cause racine (A). P>
Certains échantillons de code d'application (a) et (b) seraient très utiles. P>
merci p>
7 Réponses :
Vous pouvez simuler une fuite de mémoire en ajoutant simplement des objets à une liste globale sur une minuterie. P>
Créez simplement des objets isisposables et ne les disposez pas! Exemples en cours d'image code> code> graphiques code> ou tout type de manipulateur ou de code qui branche dans le code non géré pour créer / gérer des ressources. P>
Idisposable ne fait rien de spécial ici. Tout objet fonctionnera, tant que vous ne le laissez pas devenir inaccessible.
L'application qui fuit peut ressembler à:
public static void Main() { Process process = Process.Start("leaker.exe"); process.Kill(); }
J'ai mis en œuvre votre exemple de code. Mon fuite.exe démarre avec une utilisation de la mémoire de 6 Mo par onglet Processus de gestion de tâches. Je ne sais pas quelle propriété que je pourrais utiliser pour le mesurer ... J'obtiens plusieurs propriétés où de l'éventualité de SystemMemorysisez tout le chemin de VirtualMemorySize64, mais je ne sais pas quelle propriété correspondrait à l'utilisation de la mémoire de la mémoire. J'ai essayé d'imprimer des valeurs de la propriété mémoire pour consoler mais toujours pas de chance. S'il vous plaît aider.
Demandez à la mémoire de la mémoire de consommer de manière plus agressive en créant un tableau code> Byte code>. Essayez d'utiliser privatememorysize64 code>. Il devrait commencer à ramper avec le temps.
Le ci-dessous adresse ce que vous voulez dans (a) une fuite de mémoire progressive à partir d'une application de console dans laquelle vous pouvez définir la quantité sur une fuite et la durée pour la fuir. P>
- APP Console qui mange progressivement la mémoire LI>
- Le paramètre n ° 1 est la mémoire qu'il va manger en mégaoctets (c'est-à-dire 6000 est 6 concerts) li>
- Le paramètre n ° 2 est le délai progressif de chaque itération (c'est-à-dire 1000 est 1 seconde) li>
- La mémoire engagée et l'ensemble de travail sera autour du même li> ol>
Il a été conçu pour utiliser XMLNode comme objet qui prend la mémoire, car la mémoire engagée (mémoire allouée par le processus dans OS) et la mémoire de travail de travail (la mémoire réellement utilisée par le processus) serait la même. Si un type d'apprentissage est utilisé pour reprendre une mémoire, tel qu'un tableau d'octets [], le jeu de travail n'est généralement rien, car la mémoire n'est pas réellement utilisée par le processus, même si elle a été allouée. P>
Assurez-vous de compiler en X64 sous les propriétés du projet sous l'onglet Build. Sinon, si c'est compilé en X32, il obtiendra une erreur de mémoire sur la limite de 1,7gigs. En X64, la mémoire qu'il mange sera assez "illimitée". P> blockQuote>
xxx pré> Et comme la réponse de Brian Gideon déjà recommandée, vous pouvez appeler cela à l'aide du code suivant, puis tuez le processus de votre part (B). L'exemple ci-dessous appelle MemoryHog.exe (le programme du code ci-dessus) pour manger 6 périmés et faire une pause toutes les 2 secondes p> blockQuote>
xxx pré> blockquote>
J'ai créé le mien avec ce code:
J'ai essayé d'utiliser l'approche, décrite dans la réponse acceptée, mais cela n'a pas fonctionné - il semble que le compilateur ou l'exécution ait optimisé cela.
J'ai trouvé la modification la plus simple qui fait ce travail: < / p> Ce code rend la demande consommer de plus en plus de mémoire. p> p>
dans une console ou gagnez une application Créez un code> objet code> (panneau1), puis ajoutez 1000 la bonne façon de le faire serait p> Fuite de la mémoire dans Calling Controls.Clear () P> appeler la méthode transparente ne supprime pas les poignées de contrôle de la mémoire.
Vous devez expliquer explicitement la méthode d'élimination pour éviter les fuites de mémoire p>
blockQuote> p> Imagebox code> avoir son
Image CODE> Définir la propriété puis appelez < Code> panneau1.controls.clear code>. Toutes les commandes Picturebox sont toujours dans la mémoire et sans façon
gc code> peuvent les collecter:
Cela devrait être la bonne réponse. Monde réel, erreur possible.
Cela ressemble à des devoirs pour moi.