IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Optimisation


Sujet :

Windows Forms

  1. #1
    Membre confirmé

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Par défaut [C#] Optimisation
    Bonsoir,

    J'ai remarquer une chose interressante.
    J'ai fait un petit programme en c# et je regardais un peu les processus.
    Au lancement de cette appli la mémoire utilisée est de 16,5mo(Ce qui est énorme pour des applis destinées au TSE).
    Lorsque je clique sur le bouton pour minimiser cette forme, l'appli passe à 1,5mo de mémoire .
    Et quand je la réagrandie, 5mo...

    Comment otimiser son application?
    Est ce le fait des DLL dynamiques qui sont libérées?
    Quelle est le code derrière le bouton minimiser à par FormWindowState.Minimise?
    Faut il utiliser des Dispose à tout va?

    Y a t'il des trucs à connaître pour utiliser mon de mémoire? De place?
    Quels sont vos astuces?

    Merci d'avance...

  2. #2
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Salut

    Pas evident a optimiser le .net

    Pour comprendre comment est gerée la memoire sous .net:
    http://msdn.microsoft.com/msdnmag/issues/1100/GCI/
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/dotnetgcbasics.asp

    Pour savoir ce qu'il se passe quand tu minimise la Form: reflector
    http://www.aisto.com/roeder/dotnet/

    Pour bien coder:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenet.asp
    (+ de 1000 pages)

    Pour verifier si t'as vraiement bien codé: nProf
    nprof.sourceforge.net/Site/SiteHomeNews.html

    Prends le temps de lire les articles / utiliser les softs dans cet ordre, nProf est le plus difficile a mettre en oeuvre car il faut deja maitriser tout ce precede pour pas etre noyé dans des probemes de performances dûs a du à une application mal codée

  3. #3
    Membre confirmé

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Par défaut
    Merci bien Piotrek, très interressant ces liens, je vais me mettre à lire.
    S'il y a d'autres propositions je suis également preneur.

  4. #4
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Deja je pense pas qu'il faille s'attarder sur la taille qu'occupe un programme .net en memoire: comme tu vois les symptomes de l'applis sont trop barjot

    Mais il y a aussi un autre aspect de l'optimisation dont on a pas forcément conscience et dont on parle peu: comment l'appli est faite graphiquement.
    En effet, il est préférable de faire une IHM très décomposée avec beaucoup de fenêtres légeres, une pour chaque interaction demandée plutôt qu'une seule grosse form qui contient tout et ou tout est chargé en permanence:
    - tu occupes de fait moins la mémoire
    - le garbage collector collecte de plus petits objets morts, d'une maniere plus fluide
    (.net a éte concu et optimisé dans l'optique poo)

    Idem pour les bases de données: il faut guider l'utilisateur pour qu'il ne séléctionne que les données sur lesquelles il va vraiement travailler. Pour cela il faut bien connaître comment le programme est utilisé, à quelles occasions on peut faciliter la tâche de l'utilisateur (n'afficher que les factures non payées pour le mois precédent...) au lieu de faire des grosses sélections de données en aveugle qui ralentissent la base, occupent de la mémoire et font perdre du temps

  5. #5
    Membre confirmé

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Par défaut
    Hum, mon but n'est pas d'optimiser .Net, loin de là. Mais de comprendre pourquoi mon appli est aussi lourde.

    Quand je parlais d'optimisation, je voulais dire optimiser MON CODE.
    Bien fermer les objets non utilisés, décomposer les grosses forms... etc.
    Avoir des destructeurs (je suis plus sur de therme).

    Le fait de ne plus utiliser certains composants (style xp, téléchargés sur le net) m'on fait gagner + de 20mo de mémoire utilisée.

    Cela peut paretre peut 12mo, mais pour une application qui va être utilisée principalement par des utilisateurs connectés en TSE c'est lourd.

    J'ai vu des fonctions comme le Dispose(les parametres) Mais je crois que le Close() le fait automatiquement....

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par GéniuS77
    Avoir des destructeurs (je suis plus sur de therme).
    Pas avec .NET :)

    Citation Envoyé par GéniuS77
    Le fait de ne plus utiliser certains composants (style xp, téléchargés sur le net) m'on fait gagner + de 20mo de mémoire utilisée.
    Ah... les styles XP :)

    Citation Envoyé par GéniuS77
    J'ai vu des fonctions comme le Dispose(les parametres) Mais je crois que le Close() le fait automatiquement....
    Nope, c'est l'inverse. Pour Dispose, la règle est simple : si tu crées un objet qui implémente Dispose, tu l'appelles dès que tu as fini de t'en servir.

    Quand c'est une variable locale d'une méthode, tu peux utiliser l'instruction using qui fait ça toute seul.
    Si l'objet en question est utilisé au travers de plusieurs méthodes (donc que c'est un membre privé de la classe), tu modifies ta classe pour qu'elle implémente l'interface IDisposable et dans sa méthode Dispose, tu appelles le Dispose de l'objet créé.

    Effet secondaire : une fois que ta classe implémente IDisposable, le code qui l'utilise est censé systématiquement appeler son Dispose aussi :)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimisation de votre SGBDR et de vos requêtes...
    Par SQLpro dans le forum Langage SQL
    Réponses: 35
    Dernier message: 11/01/2013, 11h49
  2. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  3. [VB6] [BDD] Optimisation de l'accès aux données
    Par LadyArwen dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/01/2003, 13h27
  4. [langage]Problème de temps de lecture, optimisation
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2003, 08h47
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo