2008-08-13 9 views
6

J'ai utilisé le CF Remote Performance Monitor, mais cela semble suivre uniquement la mémoire initialisée dans le monde géré par opposition au monde non géré. Eh bien, je ne peux que le supposer car les nombres listés dans le profileur sont bien en deçà du maximum autorisé (32mb sur CE 5). Le profilage d'une application particulière avec le RPM m'a montré que l'utilisation totale de toutes les caches réussit seulement à atteindre environ 12mb puis à se rétrécir lentement car (je suppose) quelque chose de non géré commence à réclamer plus de mémoire. Le curseur de mémoire dans Système indique également que la mémoire de l'appareil est très courte. Si je tue le processus, le curseur montre toute la mémoire qui revient. Il doit donc (?) Être ce processus géré qui avale la mémoire.Quel est le meilleur moyen de trouver TOUTE votre mémoire lors du développement sur le Compact Framework?

Existe-t-il un moyen simple (ish?) De suivre l'utilisation de la mémoire non gérée d'une manière qui me permettrait de faire correspondre les appels P/Invoke correspondants?

EDIT: Pour tous vous re-taggeurs ce n'est pas .NET, en taguant la question comme ceci confonde les choses. C'est .NETCF/Compact Framework. Je sais qu'ils semblent être similaires, mais ils sont différents parce que .NET bascule alors que CF est fondamentalement juste une enveloppe autour de NotImplementedException.

+1

".NET bascule alors que CF est fondamentalement juste une enveloppe autour de NotImplementedException." J'aime cette citation! – Stormenet

Répondre

3

Essayez d'activer Interop logging.

En outre, si vous avez accès au code de la dll native que vous utilisez, vérifiez ceci: http://msdn.microsoft.com/en-us/netframework/bb630228.aspx

+0

Je sais que c'est un ancien poste mais j'espère que vous le verrez et répondrez. Le deuxième lien va à http://msdn.microsoft.com/en-us/vstudio/aa496123 qui semble être un site de premier niveau pour Visual Studio. Vous souvenez-vous de ce à quoi vous étiez lié? –

1

J'ai vraiment combattu avec des problèmes non gérés dans un C# géré application pendant un certain temps - il est pas facile.

Ce que j'ai trouvé le plus utile est d'avoir une sortie régulière dans un fichier journal texte. Par exemple, vous pouvez imprimer la sortie de GlobalMemoryStatus toutes les deux minutes avec la journalisation chaque fois que vous chargez un nouveau formulaire. À partir de là, vous pouvez au moins voir que la mémoire s'érode graduellement, ou qu'un énorme morceau de mémoire disparaît à certains moments de la journée. Pour nous, nous avons constaté une perte de mémoire progressive toute la journée tant que l'appareil était utilisé. De là, nous avons finalement constaté que l'appareil d'analyse de codes à barres était en cours d'initialisation pour aucune raison particulière dans notre classe de base de formulaire (je blâme le développeur précédent! :-)

Configurer cette journalisation peut être un petit problème, mais pour nous, il payé des dividendes énormes à long terme en particulier avec l'appareil en utilisation live, nous pouvons obtenir des données réelles, l'instrumentation, empiler des traces d'exceptions, etc

1

Ok, j'utilise C++ sur CE, pas C# donc ce n'est peut-être pas utile, mais ...

J'utilise un package appelé Entrk toolbox qui surveille l'utilisation de la mémoire et des ressources, les fuites et les exceptions sous Windows CE. Assez comme une version légère de CE de boundschecker. Fait l'astuce la plupart du temps.

Questions connexes