Mémoire insuffisante pour continuer l’exécution du programme pour C# WPF

la programmation


Projet: J’ai fait réaliser un projet de comptabilité dans MS Access Projet ADP 2003 qui se connecte à la base de données SQL Server. Parce qu’il n’est pas possible de créer une interface utilisateur belle et moderne avec animation dans Access, j’ai décidé de réécrire mon programme, je veux convertir ce projet à un projet pour pouvoir avoir un programme rapide et avoir une belle interface utilisateur avec une animation et une fonctionnalité permettant à l’utilisateur de changer le thème de l’application entière en Dark ou Light, j’ai donc déclaré C# WPF.

Informations sur le projet: C# WPF avec .NET Framework 4.7.2, j’ai également utilisé Material Design pour définir le thème Dark/Light pour TOUTE l’application

Système d’exploitation: Windows 10 x64 avec 8 Go de RAM

Codes : Fenêtre de facturation ↓

XAML : XAML

C# : CSHARP

Mon projet a une consommation de RAM très élevée, mais maintenant que mon projet est gros, dans ma MainWindow lorsque je veux charger une fenêtre, j’obtiens l’erreur suivante :

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.

Ce que j’ai essayé :

J’ai essayé de fournir toutes les données nécessaires pour vérifier cette erreur, c’est une erreur générale et personne ne peut commenter avec le code récapitulatif. Je ne m’attends pas à ce que quiconque lise le code en entier, mais quelqu’un peut donner une opinion ou un indice d’un simple coup d’œil.

Merci a tous

Mise à jour :

Je crée un petit WPF C# pour tester l’interface utilisateur car j’étais soupçonné de “Conception matérielle”

donc voilà :

capture d’écran

Solution 1

C’est difficile de dire quelque chose avec moins d’informations… mais :
8 Go de RAM avec Win10, ce n’est pas beaucoup de mémoire car Windwos lui-même prend jusqu’à 5 Go pour lui-même.
Maintenant, cela dépend de votre application, de ce qui se passe avec le reste de la mémoire et si c’est suffisant…

Solution 2

Citation:

Mémoire insuffisante pour continuer l’exécution du programme pour C# WPF

Vous nous avez à peine donné suffisamment d’informations pour des suppositions folles, mais suffisamment pour des solutions sensées.
La seule chose raisonnable à faire est d’essayer sur un PC de 12 Go ou 16 Go pour voir si le problème persiste.

W10 est gourmand en mémoire, et si vous le remplissez d’anti-malware, il peut être parfaitement normal que 8 Go suffisent pour W10, anti-malware et autres, mais il ne reste pas grand-chose pour les applications utilisateur.

Sinon, le problème est typique d’un code récursif non maîtrisé.

Sans mettre la main sur votre PC et faire des mesures pour comprendre ce qui consomme de la mémoire et comment cela se produit, il est impossible de vous aider. Ce type d’activité est généralement réservé aux professionnels et coûte cher en raison du temps passé.

Solution 3

Pour ajouter à ce que Ralf et Patrice ont dit… La seule façon pour le code que vous montrez de provoquer ce message d’erreur est si ce code

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

fait partie du HEAD_LST_FROOSH22 classe, ou le HEAD_LST_FROOSH22 class crée une instance de la classe actuelle et une récursivité illimitée est le résultat.

Laissez-moi essayer d’expliquer ce qu’est la « récursivité illimitée » : dans le monde réel, vous avez un travail à faire : préparer une tasse de thé. Mais pour préparer une tasse de thé, il faut faire bouillir de l’eau, et la personne à qui appartient la bouilloire ne vous la laissera prendre que lorsque vous lui donnerez… une tasse de thé.
Parce que vous avez besoin d’une bouilloire pour préparer une tasse de thé afin d’obtenir une bouilloire pour préparer une tasse de thé, vous ne pourrez jamais terminer la tâche.

En informatique, la même chose se produit : la méthode A s’appelle elle-même (récursion directe)
soit il appelle la méthode B qui appelle la méthode A (récursion indirecte). Parce que chaque fois que vous appelez une méthode, elle utilise de l’espace sur la pile d’application, vous épuisez très rapidement toute la pile et vous obtenez une erreur « mémoire insuffisante ». Les piles sont assez petites – seulement 1 Mo – il est donc très facile de dépasser ce chiffre.

Commencez donc par examiner “le code entier” et déterminez quelle est la relation entre les appels qui contiennent ce code et le HEAD_LST_FROOSH22 la classe est.

コメント

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