Existe-t-il un moyen de déterminer la quantité de mémoire utilisée pour un objet particulier? Par exemple une liste. Prenant tout en compte, comme l'internalisation de chaîne et tout ce qui est fait par compilateur/environnement d'exécution/peu importe.C#: utilisation de la mémoire d'un objet
Répondre
Vous devriez vraiment définir exactement ce que vous entendiez par "combien de mémoire est utilisée pour un objet particulier". Par exemple, vous pourriez vouloir dire "si cet objet était collecté, combien serait libéré" - ou vous pourriez dire "combien de mémoire cet objet et tout ce qu'il touche prennent". Votre point sur l'internage de chaîne est un bon exemple.
Supposons que vous faites:
List<string> internedStrings = new List<string>();
List<string> nonInternedStrings = new List<string>();
for (int i=0; i < 1000; i++)
{
string tmp = new string(' ', i+1);
nonInternedStrings.Add(tmp);
tmp = tmp.Intern();
internedStrings.Add(tmp);
}
Est-nonInternedStrings
vraiment prendre plus de mémoire que internedStrings
? Si internedStrings
était garbage collecté, il ne libérerait pas autant de mémoire - mais si internedStrings
n'avait jamais été créé (y compris ne pas interner chacun de ses éléments) alors plus de mémoire n'aurait jamais été nécessaire.
Si vous pouvez être plus précis à propos de exactement ce que vous voulez dire, nous pouvons peut-être vous aider. C'est un problème complexe cependant.
bien, c'est exactement ce que je voulais savoir: p Si, quand je récupère tout un tas de lignes de la base de données (où de nombreuses lignes comprennent la même chose cordes dans certaines colonnes), devrais-je m'assurer qu'ils sont internés, ou ne devrais-je pas m'en préoccuper? – Svish
Je ferais la chose la plus simple qui fonctionne pour commencer, puis profiler votre application pour voir combien de mémoire elle utilise. Cependant, je n'utiliserais pas String.Intern - J'ai laissé une réponse à votre autre question pour expliquer pourquoi. –
va vérifier, merci =) – Svish
Avez-vous essayé CLR Profiler 2.0?
essayez celui-là. Espérait quelque chose dans le code cependant. Donc, je pourrais trier Console.WriteLine (MemoryUsageOf (someObject)) ou quelque chose comme ça: p – Svish
CLR Profiler vous fournit une mine d'informations le long des informations de la mémoire ... La meilleure façon d'écrire du code est d'écrire aucun code;) –
Si cela fonctionne ... Exécution du programme fonctionne, le lancement de mon programme fonctionne. Mais quand je quitte mon programme, le profileur CLR jette une exception: – Svish
Cela semble être un frère ou une soeur Delphi question. Un algorithme naïf ne prendra pas en compte la différence entre l'agrégation et la composition. Même un algorithme basé sur mark et sweep ne vous dira pas si une table de hachage doit développer son tableau interne car un objet a été référencé par elle. Il est probablement préférable de profiler votre application pour une variété de scénarios et de tracer l'utilisation des ressources par rapport à N, où N est une mesure de l'échelle de votre ensemble de données.
ANTS Memory Profiler définit la consommation de mémoire du code .NET. J'ai eu d'excellents résultats avec ça par le passé.
- 1. Utilisation de la mémoire
- 2. Utilisation de la mémoire IronPython
- 3. C#: objets simples et complexes et utilisation de la mémoire
- 4. Utilisation de la mémoire + .net
- 5. Utilisation de la mémoire SQL
- 6. Utilisation de la mémoire de l'application C++/Qt
- 7. Utilisation de la mémoire du processus en cours dans C
- 8. Utilisation de la mémoire dans la R
- 9. Comet, responseText et utilisation de la mémoire
- 10. utilisation emboîtés de C# objet Initialiseur
- 11. Utilisation de la mémoire de JBoss?
- 12. C++ Allocation dynamique de la mémoire
- 13. Utilisation de la mémoire Visual Studio 2005
- 14. Utilisation de la mémoire VS. Utilisation du processeur dans l'iphone
- 15. Soll d'utilisation de la mémoire de l'application C# à l'exécution?
- 16. Motif d'état dans les applications iPhone (utilisation de la mémoire)
- 17. mémoire modification en C++
- 18. Portillon, pile de pages et utilisation de la mémoire
- 19. Utilisation de la mémoire Windows et du fichier de pages
- 20. Comment savoir une utilisation de la mémoire de thread?
- 21. Utilisation limitée de la mémoire de sql server 2008 express?
- 22. Nettoyage de la mémoire C# .NET Linq ou fuite?
- 23. Comment obtenir l'utilisation de la mémoire sous Windows en C++
- 24. Objectif C Confusion de la gestion de la mémoire
- 25. Flux C++ vers la mémoire
- 26. Nourrir un objet Excel QueryTable de la mémoire
- 27. Utilisation de la mémoire sur une machine RHEL 32 bits
- 28. Mise en cache Asp.net et utilisation de la mémoire W3P
- 29. Utilisation efficace de la bande passante mémoire pour le streaming
- 30. Problème de mémoire C/C++?
Dupliqué: http://stackoverflow.com/questions/426396/how-much-memory-does-ac-net-object-use – FerranB
Donc, il semble ... désolé 'bout à bout :) – Svish