2011-05-17 4 views
1

J'utilise une application WinForms construite avec IdeaBlade et DevExpress ... Il me semble que les contrôles DevExpress provoquent la persistance des objets en mémoire. J'essaie de trouver ce qui empêche le ramasse-miettes d'enlever ensuite avec peu de succès.WinForms App Memory Leak

Est-ce que quelqu'un peut vous recommander une application d'analyse capable de trouver quel gestionnaire, etc., détient un élément en mémoire?

J'ai utilisé AQTime 7 Pro et .NET Memory Profiler, mais aucun d'entre eux ne semble indiquer clairement ce qui cause le problème.

À la votre!

+0

Pouvez-vous spécifier quels contrôles DevExpress et quels objets? Sont-ils connectés aux contrôles DevExpress? Avez-vous essayé d'ajouter des substitutions Finalize() pour voir si les objets quittent la mémoire? – Ryan

+0

@minitech - À ce stade, je cherche SolEx à DevExpress.XtraGrid.GridControl, mais chaque formulaire qui utilise un contrôle ou un objet DevExpress a le même problème. Ce que je remarque, c'est l'ouverture du formulaire avec ce contrôle ajoute ~ 4mb à l'utilisation de la mémoire. Lorsque vous quittez le formulaire, aucune mémoire n'est libérée. Ouvrir à nouveau le formulaire ajoute 4 Mo supplémentaires à la mémoire. Jetez un oeil en utilisant AQtime 7 Pro, il montre le formulaire, ses contrôles, et le gestionnaire de liaison xtragrid sont toujours des objets en mémoire, mais cela n'explique pas ce qui les retient là. Il semble que DevExpress pourrait être le problème. –

+0

Vous pouvez noter que le garbage collector .NET peut collecter de la mémoire inutilisée à un moment arbitraire, généralement lorsqu'il estime que la mémoire supplémentaire est requise ou lorsque votre application est inactive pendant une longue période et qu'il n'y a donc aucun problème . Essayez de créer plusieurs milliers de formulaires, en enregistrant l'utilisation de la mémoire après chaque création et en vérifiant s'il y a une goutte n'importe où. Si c'est le cas, vous n'avez probablement aucun problème. Les contrôles DevExpress peuvent simplement charger un grand nombre de ressources partagées telles que des images, etc. – Ryan

Répondre

1

ANTS Memory Profiler de Red Gate peut faire l'affaire.

Avertissement: D'autres profileurs de mémoire sont disponibles.

+0

Ne semble pas jouer nive avec DevExpress. Lors de l'ouverture de cette application est planté se plaindre qu'il ne pouvait pas trouver un DevExpress .dll ... Confus, oui! Je n'ai pas pris la peine de comprendre pourquoi. –

0

dotTrace Memory et dotTrace Performance sont tout à fait capables de gérer des applications GUI intensives où le profileur ANTS ne le fait pas bien. DotTrace vous indiquera ligne par ligne où se trouve le coupable. dotTrace est faite par JetBrains qui nous a donné ReSharper.

+0

Existe-t-il un tutoriel pour la mémoire dorTrace? Je n'arrive pas à déchiffrer ce qui garde les objets en mémoire. –