Lo que usted describe es un comportamiento totalmente normal para un programa .NET, no hay indicación de que haya algún problema con su código.
El problema más grande es que TaskMgr.exe no es un programa muy bueno para decirte lo que está sucediendo en tu proceso. Muestra el "conjunto de trabajo" para un proceso, un número que tiene muy poco que ver con la cantidad de memoria que usa el proceso.
El conjunto de trabajo es la cantidad de RAM que utiliza su proceso. Cada proceso obtiene 2 gigabytes de memoria virtual para usar para código y datos. Incluso en su caja virtual de XP con solo 512 MB de RAM. Sin embargo, todos estos procesos tienen solo una cantidad de RAM establecida para trabajar. En una máquina pequeña que puede ser tan poco como un gigabyte.
Al tener múltiples procesos en ejecución, cada uno con gigabytes de memoria virtual con solo un gigabyte de memoria real requiere algo de magia. Eso es proporcionado por el sistema operativo, Windows virtualiza la RAM. En otras palabras, crea la ilusión para cada proceso que se ejecuta por sí mismo en una máquina con 2 gigabytes de RAM. Esto se hace mediante una función llamada paginación, cuando un proceso necesita leer o escribir en la memoria, el sistema operativo toma una porción de RAM para proporcionar la memoria física.
Inevitablemente, tiene que tomar de distancia parte de la RAM de otro proceso para que pueda estar disponible para los suyos. Cualquier cosa que haya estado previamente en ese trozo de RAM necesita ser preservada. Eso es lo que hace el archivo de paginación , almacena el contenido de la RAM que se paginó.
Claramente, esto no es gratis, los discos son bastante lentos y la paginación es una operación costosa. Es por eso que las máquinas de bajo rendimiento tienen un rendimiento pobre cuando les pides que ejecuten varios programas grandes. La medida real para esto también es visible en TaskMgr.exe pero tienes que agregarlo. Ver + Seleccionar columnas y marcar "Delta de error de página". Observe este número mientras se ejecuta su proceso. Cuando lo veas como máximo, puedes esperar que tu programa disminuya mucho y el uso de la memoria que se muestra cambie rápidamente.
Direccionamiento de sus observaciones:
creación de objetos ... el programa administrador de tareas, como era de esperar, el uso de memoria algunos "saltos"
Sí, está utilizando la memoria RAM por lo que el conjunto de trabajo sube .
Estos mem-uso "saltos" también se mantiene ejecutar después de la interacción del usuario terminó
No mates, pero otros procesos obtienen más tiempo para ejecutar, utilizando la memoria RAM a su vez y chocando algunos de los suyos a cabo. Verifique la columna delta de falla de página.
He utilizado el generador de perfiles de las hormigas, pero algo impide que esos "saltos" sucedan después de la interacción del usuario.
Sí, los perfiladores de memoria se centran en el uso real de la memoria de su programa, el tipo de memoria virtual. En su mayoría ignoran el conjunto de trabajo, no hay nada que puedas hacer al respecto y el número no tiene sentido porque realmente depende de qué otros procesos se están ejecutando.
no es el caso de que el uso de la memoria crece y crece hasta que el colapso
que puede ser un efecto secundario de la recolector de basura, pero eso no es típico. Probablemente esté viendo a Windows recortar su conjunto de trabajo, tirando páginas para que no consuma demasiadas.
En una máquina Windows XP Mode (VM en Win 7), con sólo 512 MB de RAM asignada funciona bien
Eso es probablemente porque no ha instalado ningún programa de grandes en que WM que competiría para RAM XP también fue diseñado para funcionar bien en máquinas con muy poca memoria, es liso en una máquina con 256 MB. Definitivamente no es el caso de Vista/Win7, fueron diseñados para aprovechar el hardware de la máquina moderna. Una característica como Aero es un bonito eye candy pero muy caro.
El problema es peor cuando el sistema tiene algunos otros programas que se ejecutan pesados
Sí, usted está compitiendo con los otros procesos que requieren mucha memoria RAM.
Ni siquiera el primer símbolo de diagrama se puede crear, mientras que el uso de la memoria despega como un cohete
páginas Sí, que está viendo siendo asignada de nuevo a la memoria RAM, siendo recargado desde el archivo de paginación y los archivos ngen-ed .ni.dll. Aumentando rápidamente tu conjunto de trabajo nuevamente. También verá el número del delta del error de página en pico.
Concluyendo, su programa WPF solo consume mucha memoria y necesita la potencia necesaria para funcionar bien. No es fácil de arreglar, se necesita un rediseño bastante drástico para reducir los requisitos de recursos. Así que simplemente ponga los requisitos del sistema en la caja, es completamente normal hacerlo.
Después de agregar una llamada GC.Collect() después de cada ejecución de comandos (aquellos que crean nodos y conectores en el diagrama, más la información de deshacer/rehacer) el resultado es casi el mismo en la PC lenta. –
Responde a esta pregunta. Pero el problema sigue sin resolverse. Suponiendo que se encuentra el código no administrado que causa el problema, ¿qué haría? póngase en contacto con el fabricante del componente nativo o la biblioteca para informarles de un error? –