Quelle est la meilleure façon de retrouver TOUTE votre mémoire lors du développement sur le Compact Framework ?

StackOverflow https://stackoverflow.com/questions/10309

  •  08-06-2019
  •  | 
  •  

Question

J'ai utilisé le CF Moniteur de performances à distance, cependant, 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 présumer cela car les nombres répertoriés dans le profileur sont bien inférieurs au maximum autorisé (32 Mo sur CE 5).Le profilage d'une application particulière avec le RPM m'a montré que l'utilisation totale de tous les caches ne parvient qu'à atteindre environ 12 Mo, puis diminue lentement à mesure que (je suppose) quelque chose de non géré commence à réclamer plus de mémoire.Le curseur de mémoire dans Système montre également que l'appareil manque très de mémoire.Si je tue le processus, le curseur affiche toute la mémoire qui revient.Ce doit donc (?) être ce processus géré qui engloutit la mémoire.

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

MODIFIER:À tous ceux qui re-étiquetent, ce n'est pas .NET, marquer la question comme ceci confond les choses.C'est .NETCF / Compact Framework.Je sais qu'ils semblent similaires, mais ils sont différents parce que .NET est génial alors que CF n'est fondamentalement qu'un wrapper autour de NotImplementedException.

Était-ce utile?

La solution

Essayez d'activer Journalisation d'interopérabilité.

Aussi, 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

Autres conseils

Je me bats définitivement depuis un certain temps avec des problèmes non gérés dans une application gérée en C# - ce n'est pas facile.

Ce que j'ai trouvé le plus utile, c'est d'avoir une sortie régulière dans un fichier journal texte.Par exemple, vous pouvez imprimer la sortie de État de la mémoire globale toutes les deux minutes ainsi que la journalisation chaque fois que vous chargez un nouveau formulaire.À partir de là, vous pouvez au moins voir que soit la mémoire s’érode progressivement, soit qu’une énorme partie de la mémoire disparaît à des moments précis de la journée.

Pour nous, nous avons constaté une perte de mémoire progressive tout au long de la journée tant que l'appareil était utilisé.À partir de là, nous avons finalement découvert que le lecteur de codes-barres était initialisé sans raison particulière dans notre classe de base Form (je blâme le développeur précédent !:-)

La configuration de cette journalisation peut être un petit problème, mais pour nous, cela a rapporté d'énormes dividendes à long terme, en particulier avec l'appareil utilisé en direct, nous pouvons obtenir des données réelles, des instruments, des traces de pile à partir d'exceptions, etc.

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

J'utilise un package appelé Boîte à outils d'entrée qui surveille l'utilisation de la mémoire et des ressources, les fuites et les exceptions sous Windows CE.Un peu comme une version CE légère deboundschecker.Fait l'affaire la plupart du temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top