Memoria insuficiente para continuar la ejecución del programa para C# WPF

programación


Proyecto: Hice un proyecto de contabilidad en MS Access ADP 2003 que se conecta a la base de datos de SQL Server. Debido a que no es posible crear una interfaz de usuario hermosa y moderna con animación en Access, decidí reescribir mi programa, quiero convertir ese proyecto. a un proyecto para poder tener un programa de alta velocidad y una hermosa interfaz de usuario con animación y la función de que el usuario pueda cambiar el tema de toda la aplicación a Oscuro o Claro, así que dije C# WPF.

Información del proyecto: C# WPF con .NET Framework 4.7.2, también utilicé Material Design para configurar el tema Oscuro/Claro para TODA la aplicación

SO: Windows 10 x64 con 8 GB de RAM

Códigos: Ventana Factura ↓

XAML: XAML

C# : CSHARP

Mi proyecto tiene un consumo de RAM muy alto, pero ahora que mi proyecto es grande, en mi ventana principal cuando quiero cargar una ventana, aparece el siguiente error:

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            new HEAD_LST_FROOSH22().Show();
        }
Error:

System.OutOfMemoryException: 'Insufficient memory to continue the execution of the program.

Lo que he probado:

Intenté proporcionar todos los datos necesarios para verificar este error, este es un error general y nadie puede comentar con el código de resumen. No espero que nadie lea el código completo, pero alguien puede dar una opinión o una pista con un vistazo.

gracias a todos

Actualizar :

Creo un pequeño C# WPF para probar la interfaz de usuario porque se sospechaba que hacía “Material Design”

asi que aqui esta :

captura de pantalla

Solución 1

Es difícil decir algo con tanta información… pero:
8 GB de RAM con Win10 no es mucha memoria porque el propio Windwos ocupa hasta 5 GB.
Ahora depende de tu Aplicación lo que pasa con el resto de la Memoria y si es suficiente…

Solución 2

Cita:

Memoria insuficiente para continuar la ejecución del programa para C# WPF

Apenas nos dio suficiente información para hacer conjeturas descabelladas, pero sí suficiente para soluciones sensatas.
Lo único sensato es probar en un PC con 12GB o 16GB para ver si aún surgen problemas.

W10 consume mucha memoria, y para llenarlo con anti-malware, puede ser perfectamente normal que 8 GB sean suficientes para W10, anti-malware y otras cosas, pero no queda mucho para las aplicaciones de usuario.

De lo contrario, el problema es típico del código recursivo no dominado.

Sin poner las manos en tu PC y hacer mediciones para entender qué consume memoria y cómo lo hace, es imposible ayudar. Este tipo de actividad es generalmente para profesionales y es costosa por el tiempo invertido.

Solución 3

Para agregar a lo que Ralf y Patrice han dicho… La única forma en que el código que muestra podría causar ese mensaje de error es si este código

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            new HEAD_LST_FROOSH22().Show();
        }

es parte del HEAD_LST_FROOSH22 clase, o el HEAD_LST_FROOSH22 class crea una instancia de la clase actual y el resultado es la recursividad ilimitada.

Permítanme intentar explicar qué es la “recursión ilimitada”: en el mundo real, tienes un trabajo que hacer: preparar una taza de té. Pero para hacer una taza de té, tienes que hervir agua, y la persona que posee la tetera sólo te la dejará tomar cuando le des… una taza de té.
Debido a que necesitas una tetera para preparar una taza de té para poder conseguir una tetera para preparar una taza de té, nunca podrás terminar la tarea.

En informática sucede lo mismo: el método A se llama a sí mismo (recursividad directa)
o llama al método B que llama al método A (recursión indirecta). Porque cada vez que llama a un método, este utiliza espacio en la pila de la aplicación, agota muy rápidamente toda la pila y obtiene un error de “memoria insuficiente”. Las pilas son bastante pequeñas (sólo 1 MB), por lo que es muy fácil superarlas.

Así que comience mirando el “código completo” y averigüe cuál es la relación entre las llamadas que contienen ese código y el HEAD_LST_FROOSH22 la clase es.

コメント

タイトルとURLをコピーしました