2010-10-27 7 views
2

J'ai une application WPF qui ne semble pas ramasser les ordures sur les systèmes x64. Je l'ai testé avec soin sur des machines x86 et je suis confiant que ce n'est pas un problème de programmation, l'utilisation de la mémoire va augmenter et puis sera ramassé garbage comme je l'attends. La plate-forme cible = 'Any CPU'.NET Garbage Collector différence entre x86/x64. x64 ne collecte pas

J'ai découvert que je peux éliminer ce comportement sur les machines x64 en compilant avec target = x86. x64 ou "Any CPU" ne parvient pas à libérer de la mémoire.

J'ai également remarqué au cours de mes investigations que la création d'un domaine d'application enfant et la minimisation manuelle de l'ensemble de travail de l'application fonctionnent sur x86 mais sont ignorées sur les systèmes x64. Jusqu'à ce que je mets la cible = x86.

Est-ce que quelqu'un sait pourquoi ce comportement existe? Avons-nous besoin d'éviter 'Any CPU' ou x64?

+0

Quelle était la quantité de mémoire disponible sur cette machine? Et quelle est la quantité totale de mémoire là-bas? – zerkms

+0

Au moins certaines éditions de Windows 32 bits forceront la minimisation du jeu de travail d'une application lorsque vous la réduisez au minimum. Peut-être que cela a été éliminé des versions 64 bits. –

+2

N'utilisez pas Taskmgr.exe pour diagnostiquer des problèmes GC. –

Répondre

2

Le Garbage Collector s'exécute lorsqu'il décide de l'exécuter. C'est typiquement une question de quantité d'utilisation de mémoire aussi bien que de quantité de mémoire libre.

Si la ou les machines en question ont beaucoup de mémoire, le GC n'a aucune raison d'être exécuté. Dans les machines x86, la pression mémoire est généralement un problème, car la mémoire totale autorisée pour un processus est beaucoup plus petite (normalement 2 Go), et le total pour le système est globalement faible (~ 3 Go). Les systèmes 64 bits n'ont pas ces limitations, donc le GC fonctionnera probablement moins souvent. Rappelez-vous, cependant, ce n'est pas une mauvaise chose - l'utilisation de la mémoire est bon, à condition que vous ne manquiez pas. Plus de collections GC réduit simplement vos performances globales, et c'est seulement une bonne chose si votre fonctionnement est faible sur la mémoire disponible. Sinon, vous pouvez aussi bien utiliser la mémoire disponible.

Questions connexes