Est-il un moyen de trouver de combien de mémoire est utilisé pour un objet particulier? Par exemple, une Liste. En tenant compte de tout, comme la chaîne de stage et tout ce qui est fait par le compilateur/runtime environment/whatever.
Vous aimerais vraiment avoir à définir exactement ce que vous entendez par "quelle quantité de mémoire est utilisée pour un objet particulier". Par exemple, vous pourriez dire "si cet objet ont été ordures collectées, de combien serait libéré" - ou vous pourrait signifier "la quantité de mémoire à cet objet et à tout ce qu'il touche."
Votre point de vue sur la chaîne de stage est un bon exemple. Supposons que vous ne:
Ne nonInternedStrings vraiment prendre plus de mémoire que internedStrings? Si internedStrings ont été nettoyés, il ne serait pas gratuit, comme beaucoup de mémoire, mais si internedStrings n'avait jamais été créé (y compris ne pas s'y consacrant à chacun de ses éléments) puis de plus en plus de mémoire n'aurait jamais été nécessaire.
Si vous pouvez être plus précis sur exactement ce que vous voulez dire, nous pouvons être en mesure de vous aider. C'est une question complexe.
eh bien, c'est exactement ce que je voulais savoir :p Si, quand j'ai récupérer tout un tas de lignes à partir de la base de données (où le nombre de lignes à inclure les mêmes chaînes dans certaines colonnes), je devrais travailler sur de s'assurer qu'ils sont internés, ou ne devrais-je pas pris la peine avec elle? Je voudrais faire la chose la plus simple qui fonctionne pour commencer, et ensuite le profil de votre application pour voir la quantité de mémoire qu'il utilise. Je ne voudrais pas utiliser de Chaîne.Stagiaire - j'ai laissé une réponse sur votre question à expliquer pourquoi. check it out, merci =)
Ce qui semble être un frère ou une sœur de cette Delphi question. Un algorithme naïf de ne pas tenir compte de la différence entre l'agrégation et la composition. Même un algorithme basé sur la marque et de balayage ne vais pas vous dire si une table de hachage dû à la croissance de son tableau interne, car un objet est référencé par elle. Vous êtes probablement mieux de profilage de votre demande pour une variété de scénarios et de traçage de l'utilisation des ressources à l'encontre de N, où N est une mesure de l'échelle de votre jeu de données.
Pas de. Devrait peut-être essayer un. Attendais à quelque chose dans le code. J'ai donc pu sorte de Console.WriteLine(MemoryUsageOf(someObject)) ou de quelque chose :p CLR Profiler vous donne une mine de renseignements, ainsi que des informations sur la mémoire... La meilleure façon d'écrire le code n'est à écrire pas de code à tous 😉 Si cela fonctionnerait... de l'Exécution du programme de travaux, le lancement de mon programme fonctionne. Mais quand je l'ai sortie de mon programme, le CLR Profiler déclenche une exception:
Vous aimerais vraiment avoir à définir exactement ce que vous entendez par "quelle quantité de mémoire est utilisée pour un objet particulier". Par exemple, vous pourriez dire "si cet objet ont été ordures collectées, de combien serait libéré" - ou vous pourrait signifier "la quantité de mémoire à cet objet et à tout ce qu'il touche."
Votre point de vue sur la chaîne de stage est un bon exemple. Supposons que vous ne:
Ne
nonInternedStrings
vraiment prendre plus de mémoire queinternedStrings
? SiinternedStrings
ont été nettoyés, il ne serait pas gratuit, comme beaucoup de mémoire, mais siinternedStrings
n'avait jamais été créé (y compris ne pas s'y consacrant à chacun de ses éléments) puis de plus en plus de mémoire n'aurait jamais été nécessaire.Si vous pouvez être plus précis sur exactement ce que vous voulez dire, nous pouvons être en mesure de vous aider. C'est une question complexe.
Je voudrais faire la chose la plus simple qui fonctionne pour commencer, et ensuite le profil de votre application pour voir la quantité de mémoire qu'il utilise. Je ne voudrais pas utiliser de Chaîne.Stagiaire - j'ai laissé une réponse sur votre question à expliquer pourquoi.
check it out, merci =)
OriginalL'auteur Jon Skeet
Les FOURMIS Memory Profiler profils de la consommation de mémoire .NET code. J'ai eu d'excellents résultats dans le passé.
OriginalL'auteur Ian Nelson
Ce qui semble être un frère ou une sœur de cette Delphi question. Un algorithme naïf de ne pas tenir compte de la différence entre l'agrégation et la composition. Même un algorithme basé sur la marque et de balayage ne vais pas vous dire si une table de hachage dû à la croissance de son tableau interne, car un objet est référencé par elle. Vous êtes probablement mieux de profilage de votre demande pour une variété de scénarios et de traçage de l'utilisation des ressources à l'encontre de N, où N est une mesure de l'échelle de votre jeu de données.
OriginalL'auteur Pete Kirkham
Avez-vous essayé CLR Profiler 2.0?
CLR Profiler vous donne une mine de renseignements, ainsi que des informations sur la mémoire... La meilleure façon d'écrire le code n'est à écrire pas de code à tous 😉
Si cela fonctionnerait... de l'Exécution du programme de travaux, le lancement de mon programme fonctionne. Mais quand je l'ai sortie de mon programme, le CLR Profiler déclenche une exception:
OriginalL'auteur Vyas Bharghava