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

API, COM et SDKs Delphi Discussion :

Mémoire utilisée par mon application


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Par défaut Mémoire utilisée par mon application
    Bonjour à tous,

    Je sais que le sujet a déjà été abordé dans ce forum, mais parmi toutes les solutions proposées, aucune ne fonctionne dans ma configuration.
    J'utilise Delphi 7 et test mon application sur Win10.

    Je voudrai obtenir la mémoire utilisée par mon "exe" au même titre que celle que l'on peut visualiser dans le gestionnaire des tâches.
    Or je n'obtiens jamais le même résultat (même a quelques octets près...).

    J'ai utilisé les fonctions GetProcessMemoryInfo de l’unité psAPI, GetMemoryManagerState de FASTMM4, GetHeapStatus .... Beaucoup de code sources similaires trouvés ici et là sur internet....

    Mais je n'ai jamais un résultat semblable au gestionnaire de tâches.

    Quelqu'un aurait-il une idée ?

    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 083
    Par défaut
    Je suis aussi intéressé, pendant la comparaison entre FastMM RTL, FastMM 4.992, FastMM 5.0 et NexusMM 4.10, pas moyen de trouver les mêmes chiffres
    En 64Bits, on obtient des valeurs sur le mappage de la mémoire virtuelle qui dépasse de loin les 32Go de la machine en terme d'@
    En 32Bits, on n'a pas essayé, l'idée c'est de se débarrasser de D7.

    @Curt, D7 donc 32Bits, donc une application émulée sur un environnement 64Bits, le gestionnaire de taches n'inclut-il pas la mémoire nécessaire à l'émulation, que l'application elle-même ne voit pas puisqu'elle tourne dans le sous-système 32Bits ?
    Va savoir comment ça fonctionne WoW64 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    { TTestPerformanceExtensionPlugInImplementationEvaluationMM.TUtilities }
     
    //------------------------------------------------------------------------------
    class constructor TTestPerformanceExtensionPlugInImplementationEvaluationMM.TUtilities.Create();
    begin
      with GetMemoryStatus() do
        FStatusBase := dwTotalVirtual - dwAvailVirtual;
      with GetMemoryStatusEx() do
        FStatusExBase := ullTotalVirtual - ullAvailVirtual;
    end;
     
    //------------------------------------------------------------------------------
    class function TTestPerformanceExtensionPlugInImplementationEvaluationMM.TUtilities.GetMemoryCounters(): TProcessMemoryCounters;
    begin
      Result.cb := SizeOf(Result);
      if not GetProcessMemoryInfo(GetCurrentProcess, @Result, Result.cb) then
        ZeroMemory(@Result, Result.cb);
    end;
     
    //------------------------------------------------------------------------------
    class function TTestPerformanceExtensionPlugInImplementationEvaluationMM.TUtilities.GetMemoryDetail(): TMemoryDetail;
    begin
      ZeroMemory(@Result, SizeOf(Result));
    end;
     
    //------------------------------------------------------------------------------
    class function TTestPerformanceExtensionPlugInImplementationEvaluationMM.TUtilities.GetMemoryShot(): TMemoryShot;
    begin
      Result.Detail := GetMemoryDetail();
      Result.Status := GetMemoryStatus();
      Result.StatusRelative := Result.Status.dwTotalVirtual - Result.Status.dwAvailVirtual - FStatusBase;
      Result.StatusEx := GetMemoryStatusex();
      Result.StatusExRelative := Result.StatusEx.ullTotalVirtual - Result.StatusEx.ullAvailVirtual - FStatusExBase;
      Result.Counters := GetMemoryCounters();
    end;
     
    //------------------------------------------------------------------------------
    class function TTestPerformanceExtensionPlugInImplementationEvaluationMM.TUtilities.GetMemoryStatus(): TMemoryStatus;
    begin
      Result.dwLength := SizeOf(Result);
      GlobalMemoryStatus(Result);
    end;
     
    //------------------------------------------------------------------------------
    class function TTestPerformanceExtensionPlugInImplementationEvaluationMM.TUtilities.GetMemoryStatusEx(): TMemoryStatusEx;
    begin
      Result.dwLength := SizeOf(Result);
      if not GlobalMemoryStatusEx(Result) then
        ZeroMemory(@Result, Result.dwLength);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    { TTestPerformanceExtensionPlugInImplementationEvaluationFastMM4.TFastMMUtilities }
     
    //------------------------------------------------------------------------------
    class function TTestPerformanceExtensionPlugInImplementationEvaluationFastMM4.TFastMMUtilities.GetMemoryDetail(): TMemoryDetail;
    var
      mms: TMemoryManagerState;
      isbts: Integer;
    begin
      FastMM4.GetMemoryManagerState(mms);
      Result.Medium := mms.TotalAllocatedMediumBlockSize;
      Result.Large := mms.TotalAllocatedLargeBlockSize;
      Result.Small := 0;
      for isbts := Low(mms.SmallBlockTypeStates) to High(mms.SmallBlockTypeStates) do
        with mms.SmallBlockTypeStates[isbts] do
          Result.Small := Result.Small + InternalBlockSize * AllocatedBlockCount;
      Result.Total :=  Result.Medium + Result.Large + Result.Small;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur DELPHI
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur DELPHI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Par défaut
    Merci pour votre retour,

    Effectivement ce phénomène est certainement dû à la capacité d'exécuter des applications 32 bits sur Windows 64 bits !
    Mais il y a peut-être un moyen de récupérer directement la valeur du gestionnaire des tâches ou utiliser un composant externe.

    Je cherche encore dans ce sens...

Discussions similaires

  1. Mémoire utilisée par mon application
    Par Sephiroth Lune dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 30/05/2012, 14h21
  2. afficher statut de la mémoire utilisée par l'application
    Par lakhdar16 dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/05/2012, 11h14
  3. taille de mémoire utilisée par mon code javascript
    Par need2learn dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/10/2009, 09h00
  4. Réponses: 2
    Dernier message: 01/10/2009, 11h00
  5. Taille mémoire occupée par mon application
    Par b_reda31 dans le forum C++Builder
    Réponses: 0
    Dernier message: 15/05/2008, 03h07

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