2 votes

Puis-je simuler une pénurie de mémoire pour détecter une fuite de mémoire avec un jeu de données source plus petit dans une application .NET ?

J'ai une application qui génère de manière prévisible des erreurs hors mémoire sur de très, très (très) grands ensembles de données - nous essayons de résoudre le problème en optimisant la gestion de la mémoire de l'application, mais les très, très grands ensembles de données en question nécessitent tellement de temps pour fonctionner (des jours) qu'il est difficile d'itérer à travers les cycles de test et de trouver le problème de manière empirique.

Laissons de côté pour l'instant la question des performances des applications - c'est la prochaine étape de la liste des tâches à accomplir, après la mise en œuvre de la stratégie de développement durable. le comportement correct de l'application :

Existe-t-il un moyen simple de restreindre la quantité de mémoire dont dispose une application lorsqu'elle s'exécute en mode débogage dans Visual Studio, de manière à forcer les erreurs OutOfMemory qui ne se produisent naturellement que sur de très grands ensembles de données à se produire sur un ensemble de données plus petit ?

3voto

Il suffit d'allouer vous-même un gros morceau au démarrage du programme - avant de faire quoi que ce soit d'autre.

Pour garder environ 500MB libres (pour un processus 32 bit) :

byte[] OutOfMemory = new Byte[int.MaxValue - ((1024 ^ 2) * 500)];

2voto

Lasse V. Karlsen Points 148037

Avez-vous essayé d'allouer une grande quantité de mémoire pour commencer, et de la conserver pendant toute la durée d'exécution du programme ?

Cela réduirait la mémoire disponible pour le reste de l'application.

0voto

R Samuel Klatchko Points 44549

Une astuce qui devrait fonctionner serait d'allouer un tampon plus grand dès le démarrage du programme. Tant que vous gardez une référence à ce tampon pour qu'il ne soit pas GCed, vous obtiendrez ce que vous voulez.

0voto

Chris Smith Points 166

Je me procurerais un profileur de mémoire et j'essaierais de recréer le problème artificiellement avant qu'il ne vous morde en production. Le profileur de mémoire ANTS est assez bon pour cela :

http://www.red-gate.com/products/ants_memory_profiler/index.htm

C'est cher, mais le procès ferait probablement l'affaire pour cette question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X