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

MFC Discussion :

Partage de code par plusieurs instances


Sujet :

MFC

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Partage de code par plusieurs instances
    Bonjour à tous,
    J'ai développé une application WIN32 multi-instance qui fonctionne bien.
    Le problème, c'est que lorsque je lance l'appli 20 fois sur mon poste, la 21ème exécution s'arrête avec une erreur de "manque de mémoire". L'appli fait environ 14 Mo en mémoire (dixit le gestionnaire de tâches). 20 instances sur une machine mono-utilisateur c'est largement suffisant; malheureusement, l'appli va être utilisée sur une machine serveur (CITRIX ou TSE) avec un nombre dépassant largement les 20. La machine de test a 992 Mo de mémoire. Un rapide calcul donne pour mes 20 instances 280 Mo soit moins que les 992 Mo. Y a t'il une methode avec visual studio .net (utilisée en C++ et MFC) pour profiter de toute la mémoire dispo ? Peut-on demander qu'il y ait un seul chargement de code pour toutes les intances (un peu comme pour les dlls en WIN16) ?
    Winword 2003 fonctionne ainsi; un seul module winword apparaît dans le gestionnaire des tâches.
    Merci pour votre aide

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    C'est lié à l'OS, et l'OS partage déjà le code d'un même exécutable entre plusieurs instances, sans qu'il n'y ait rien à faire.
    Le problème, c'est plutot le gestionnaire de tâches. Et la manière de comptabiliser la mémoire aussi. Ce qui va être partagé entre toutes les instances, c'est le code executable, soit au maximum la taille de ton exe sur le disque. La mémoire allouée par chacune de tes instances, tu peux l'estimer dans la colonne "Taille MV" (et pas "Util. Mémoire") du gestionnaire de taches.
    Si Winword n'apparait qu'une seule fois, c'est tout simplement parce que Word a été programmé pour que quand une 2° instance est lancée, elle "se connecte" à la première, lui donne le document à traiter, et se termine. Ainsi il n'y a qu'un seule instance qui bosse. Y'a pas d'option de compilation là derrière, juste du code.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci Aurélien pour ta réponse.

    Elle est très claire. Sais-tu s'il y a un topic Microsoft là-dessus ? Le partage de code entre instances.

    La deuxième chose qui me chagrine aussi, c'est que mon appli plafonne à 20 instances par poste. A priori, ce n'est même pas lié à l'utilisation de la mémoire. En fait c'est une appli MDI. Pour faire les tests, je l'ouvre 20 fois sans document et 20 fois avec document et j'arrive toujours au même résultat; impossible d'en lancer une 21ème. Je ne sais pas trop dans quelle direction chercher : le nombre de handles, le nombre de thread, un vaste chantier...
    Le comportement est sensiblement différent sur un serveur CITRIX; sur ce genre de machines (d'après des utilisateurs), un maximum de 20 utilisateurs peuvent lancer le même document avec l'appli. Le 21ème utilisateur ne peut pas utiliser le même document; il y arrive en faisant un "Enregistrer sous". C'est des documents composite COM. Les documents sont ouverts en RW si possible sinon en R seulement. Je viens de finir un patch qui lit le document et le referme. J'envoie pour test. Wait and see.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Il faut trouver qui provoque l'erreur de manque de mémoire. Plus tu utilises de composants logiciels / bibliothèques qui ne sont pas de toi, plus c'est difficile. C'est peut être une limitation d'une lib que tu utilises.
    Pour des références sur le sujet, le mieux c'est surement le livre "Windows Internals, Fourth Edition".
    Sinon la MSDN:
    http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
    http://msdn.microsoft.com/library/en-us/dngenlib/html/msdn_ntvmm.asp
    et ça aussi:
    http://www.flounder.com/hooks.htm

Discussions similaires

  1. Partager du code entre plusieurs classes-filles
    Par gvdmoort dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/03/2012, 00h58
  2. Réponses: 3
    Dernier message: 11/11/2008, 18h01
  3. [débutant] partage de variable par plusieurs threads
    Par dahtah dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 06/03/2007, 13h34
  4. Partager du code Javascript entre plusieurs pages HTML
    Par oceane751 dans le forum Général JavaScript
    Réponses: 29
    Dernier message: 10/01/2006, 15h20
  5. Réponses: 1
    Dernier message: 02/01/2006, 19h05

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