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

MATLAB Discussion :

[Instrument Control Toolbox] Problème de mémoire pendant acquisition de données


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [Instrument Control Toolbox] Problème de mémoire pendant acquisition de données
    Bonjour,

    j'ai un petit soucis, Matlab me diffuse un message " out of memory" au bout de plusieurs itérations d'un programme d'acquisitions de données à partir d'un accéléromètre. J'ai appliqué un "clear all", je détruis l'objet qui gère mon acquisition et le recréer à chaque fois mais la mémoire ne se libère pas. Est ce qu'il y aurait une fonction pour cela ? à part éteindre Matlab et le redémarrer.

    Merci

    Egalement j'ai déjà regarder la FAQ sur out of memory et je ne comprend toujours pas comment fonctionne la mémoire. Tout simplement est ce possible d'effacer tout ce que l'on a acquis ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Serait-il possible de voir le code ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    il y a déjà des discutions sur le sujet
    déjà il convient de vérifier que ton code ne soit pas inutilement trop gourmant : trop de matrices, des matrices trop grosses ...
    en effet matlab stocke les matrices dans un block continue de la mémoire : il ne suffit pas d'avoir de la RAM, il faut aussi qu'elle ne soit pas trop segmenté (32 bits, autres applications, et surtout précédentes actions de matlab malgré un clear all)

    en effet matlab a une gestion de la mémoire pas terrible
    un clear all n'est pas aussi efficace que arrêt - redemarrage !

    ensuite travailler sous 64 bits apporte un plus indéniable

    enfin il est possible de lancer matlab sans l'IHM, sans Java, ce qui allège aussi la mémoire

    Fab

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Ok, comment faut il faire pour copier le code dans la forme que tout le monde utilise sur le forum ?

    Mon Windows est en 32 bits donc je conçois que cela peut poser des problèmes de mémoire mais à chaque itération je remplace les matrices que je créé par les mêmes et une itération ne me provoque pas de " out of memory" donc pourquoi la mémoire se remplit elle ?

    De plus je me suis rendu compte que la mémoire occupé par mes itérations venait très peu des variables dans le workspace puisque lorsque je fais un "clear" seulement une petite partie de la mémoire se libérait. Qu'est ce qui occupe la mémoire de matlab à part le workspace ?

    Merci de votre aide

  5. #5
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    pour insérer le code, il faut utiliser les balise code, accessible via le bouton #

    sinon cela dépend de comment tu remplaces tes matrices :
    matlab peut utiliser des matrice temporaires qui viennent te bouffer ta mémoire
    je ne me souviens plus du détail, mais il me semble que l'utilisation de fonction imbriqués (nested) peut résoudre en partie ce genre de problème car elles évite la recopie de matrice temoporaires

    Fabien

  6. #6
    Candidat au Club
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Voici mon code :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
     
     
    N=1;% Nombre d'enregistrements
      for i=1:N
     
     fs=200; % Fréquence d'échantillonage
     dt=1/fs; % période d'échantillonage
     tacq = 5; %Temps d'acquisition
    masterDevRsrcName = 'TCPIP::169.254.241.13::INSTR';
     
    masterDeviceObj = icdevice('DT8837_DT8837.mdd', masterDevRsrcName);
     
     
       try
     
        %% Connect the device object to the instrument
     
        connect(masterDeviceObj);
     
     
        %% Get the identity for each instrument
     
        % Get master instrument identity
        comobj = get(masterDeviceObj, 'Identity');
        propertyValue = get(comobj, 'InstrumentModel');
        str = strcat ('InstrumentModel= ',propertyValue);
        disp(str);
        propertyValue = get(comobj, 'InstrumentManufacturer');
        str = strcat ('InstrumentManufacturer= ',propertyValue);
        disp(str);
        propertyValue = get(comobj, 'InstrumentFirmwareRevision');
        str = strcat ('InstrumentFirmwareRevision= ',propertyValue);
        disp(str);
        propertyValue = get(comobj, 'Description');
        str = strcat ('Description= ',propertyValue);
        disp(str);
        propertyValue = get(comobj, 'Identifier');
        str = strcat ('Identifier= ',propertyValue);
        disp(str);
        propertyValue = get(comobj, 'Vendor');
        str = strcat ('Vendor= ',propertyValue);
        disp(str);
        propertyValue = get(comobj, 'Revision');
        str = strcat ('Revision= ',propertyValue);
        disp(str);
     
        %% Configure the master instrument
    g_un=1;% Valeur gain (1 ou 10)
    g_deux=10;
    g_trois=1;
    g_quattre=1;
        % Parameters analog input channel 1 for scanning
        set(masterDeviceObj.Analoginputchannel(1), 'Enabled', 'on');% Activation ou désactivation de l'entrée 1
        set(masterDeviceObj.Analoginputchannel(1), 'Coupling', 'DT8837VerticalCouplingAC');% Réglage coupling(AC ou DC)
        set(masterDeviceObj.Analoginputchannel(1), 'CurrentSourceEnabled', 'on');%  Enables or disables use of the 4 mA current source for the analog input channel.
        set(masterDeviceObj.Analoginputchannel(1), 'Gain',g_un);%  Specifies or returns the voltage gain for the analog input channel.
     
        % Parameters analog input channel 2 for scanning
        set(masterDeviceObj.Analoginputchannel(2), 'Enabled', 'on');% Activation ou désactivation de l'entrée 1
        set(masterDeviceObj.Analoginputchannel(2), 'Coupling', 'DT8837VerticalCouplingAC');% Réglage coupling(AC ou DC)
        set(masterDeviceObj.Analoginputchannel(2), 'CurrentSourceEnabled', 'on');%  Enables or disables use of the 4 mA current source for the analog input channel.
        set(masterDeviceObj.Analoginputchannel(2), 'Gain',g_deux);%  Specifies or returns the voltage gain for the analog input channel.
     
            % Parameters analog input channel 3 for scanning
        set(masterDeviceObj.Analoginputchannel(3), 'Enabled', 'on');% Activation ou désactivation de l'entrée 1
        set(masterDeviceObj.Analoginputchannel(3), 'Coupling', 'DT8837VerticalCouplingAC');% Réglage coupling(AC ou DC)
        set(masterDeviceObj.Analoginputchannel(3), 'CurrentSourceEnabled', 'off');%  Enables or disables use of the 4 mA current source for the analog input channel.
        set(masterDeviceObj.Analoginputchannel(3), 'Gain',g_trois);%  Specifies or returns the voltage gain for the analog input channel.
     
                % Parameters analog input channel 4 for scanning
        set(masterDeviceObj.Analoginputchannel(4), 'Enabled', 'on');% Activation ou désactivation de l'entrée 1
        set(masterDeviceObj.Analoginputchannel(4), 'Coupling', 'DT8837VerticalCouplingAC');% Réglage coupling(AC ou DC)
        set(masterDeviceObj.Analoginputchannel(4), 'CurrentSourceEnabled', 'off');%  Enables or disables use of the 4 mA current source for the analog input channel.
        set(masterDeviceObj.Analoginputchannel(4), 'Gain',g_quattre);%  Specifies or returns the voltage gain for the analog input channel.
     
        %       out1 = methods(masterDeviceObj)
    %       out2 = get(masterDeviceObj)
    %       out3 = get(masterDeviceObj, 'InstrumentModel')
        %% Display the AnalogInputChannels collection
        analogInputChannelCount = masterDeviceObj.Analoginputchannels.Count;
     
     
        % Preallocate array.
        analogInputChannelNames={analogInputChannelCount};
     
        for iLoop= 1:analogInputChannelCount
            analogInputChannelNames{iLoop, 1} = invoke(masterDeviceObj.Analoginputchannels, 'Name', iLoop);
        end
     
    %     invoke(masterDeviceObj.Analoginputchannels, 'Name',analogInputChannelCount )
        disp(analogInputChannelNames)
     
     
        % Disable wrapping, so that data does not get overwritten in the hardware FIFO when the FIFO is full
        %(disable wrapping = désactiver emballage)
        set(masterDeviceObj.Analoginputacquisition(1), 'WrapEnabled', 'off');
     
     
     
        % Set reference clock source to internal
        set(masterDeviceObj.Referenceoscillator(1), 'ReferenceClockSource', 'DT8837ReferenceOscillatorSourceInternal');
     
     
        % Enable the master instrument to drive the reference clock on the trigger bus
        set(masterDeviceObj.Referenceoscillator(1), 'OutputEnabled', 'on');
     
     
        % Set the clock frequency
     
         set(masterDeviceObj.Analoginputacquisition(1), 'SampleRate', fs);
     
     
        % Set the trigger source to start streaming when the instrument
        % recievs the Initiate command
        set(masterDeviceObj.Analoginputtrigger(1), 'Source', 'IMMEdiate');
     
        % Set the master trigger bus line1 (LXI0) state to be driven.  This MUST be done
        % prior to setting the slave trigger source to avoid false triggers.
        set(masterDeviceObj.Triggerbusline(1), 'Enabled', 'on');
     
     
        %% Initiate the acquisition on the master instrument.
     
        % Now, the slave leaves the 'waiting for trigger' state and starts acquiring data
        % Infos paramètres inputchannel
        masterGroupObj = get(masterDeviceObj, 'Analoginputacquisition')
        masterAnalogInputAcquisitionObj = masterGroupObj(1);
    %     inspect(masterAnalogInputAcquisitionObj)
        invoke(masterAnalogInputAcquisitionObj, 'Arm');
        invoke(masterAnalogInputAcquisitionObj, 'Initiate');
     
     
     
     
         %% Process data for the master instrument
     
     
     
        isRunning = false;
        ScanIndex = 0;
        RequestedScansToRead = fs*tacq
        out = ScanIndex
         while (isRunning == false || ScanIndex < (RequestedScansToRead-1))
             [ScanIndex, isRunning, isArmed, isTriggered, isADSyncDetected, isADFifoOverflow] = invoke(masterAnalogInputAcquisitionObj, 'GetStatus', 0, 0, 0, 0, 0, 0);
             disp(['ScanIndex: ', num2str(ScanIndex)]);
         end
     
     
         % Read 'X' scans from the master instrument
       RequestedScansIndex = 0;
         buf = [];
         while RequestedScansIndex<=RequestedScansToRead,
             [ActualScansIndex, ActualScansRead, StartTimeInSeconds, StartTimeInMilliSeconds, masterSamples] = invoke(masterAnalogInputAcquisitionObj, 'Fetch', int32(RequestedScansIndex), int32(RequestedScansToRead), int32(0), int32(0), int32(0), int32(0));
             buf=[buf masterSamples];
     
             RequestedScansIndex = ActualScansIndex+ActualScansRead;
    %                  disp(ActualScansRead)
    %                  disp(['Master: Actual Scans Index: ', num2str(ActualScansIndex) ,'  Actual Scans Read: ', num2str(ActualScansRead)]);
     
         end  
             %% Plot the data
     
         %%%%%plot(masterSamples%%%%%%
     
         N=numel(buf)% Nombre de points dans le tableau buf
     
         buffersize=ceil(N/4);% ARRONDIssement au nombre superieur du nombre de points divisé par 4
         %     disp(buffersize)
         buf=buf(1:buffersize*4);
    %          disp(buf)
         B = reshape(buf,[4 buffersize ])';% reforme la matrice buf sous la forme [4 buffersize]
         nbpoint=numel(B(:,1)); % B(:,1) = récupération Nb de points dans la 1ere colonne de B
    %      disp (nbpoint)
         t=0:dt:(nbpoint-1)*dt;
     
         %%%%%%% Attribution sensibilités capteurs dans matrice B%%%%%%%%%%%
         B(:,1) = B(:,1)/(0.81);
         B(:,2) = B(:,2)/(0.01);
         B(:,3) = B(:,3)/100;
         B(:,4) = B(:,4)/(0.81);
     
         %%%%%%%Création fichier de données%%%%%%%%%
     
             intrecord=i
             NomFichier = ['Fichier_', num2str(intrecord)];
             save(NomFichier, 'B')
     
         B1 = B(:,1);
         B2 = B(:,2);
         B3 = B(:,3);
         B4 = B(:,4);
     
         %%%%%%%%%%%%%  Tracé des courbes de chaque canal  %%%%%%%%%%%
         figure
         plot(t,B1)
         xlabel('Temps (s)')
         ylabel('Accél (m/s)')
         title('Channel 1 : A800')
         figure
         plot(t,B2,'r')
         xlabel('Temps (s)')
         ylabel('Accél (m/s)')
         title('Channel 2 : A121')
    %      figure
    %      plot(t,B3,'g')
    %      xlabel('Temps (s)')
    %      ylabel('vitesse (m/s)')
    %      title('Channel 3 : vitesse')
    %      figure
    %      plot(t,B4,'c')
    %      xlabel('Temps (s)')
    %      ylabel('vitesse (m/s2)')
    %      title('Channel 4 : accélération')
         figure
         plot(t,B1,t,B2,'r')
         xlabel('Temps (s)')
         ylabel('Accél (m/s)')
         title('A800 = Bleu et A121 = rouge')
     
     
        invoke(masterAnalogInputAcquisitionObj, 'Abort'); % annule l'acquisition
     
    catch DT8837error
        disp(['Error id: ', DT8837error.identifier]);
        disp(['Error Message: ',DT8837error.message]);
     
        end 
     
     
     
     
    %% Disconnect the device objects from the instruments and remove them from memory
     
    disconnect(masterDeviceObj);
    delete(masterDeviceObj);
    clear all;
      end
    il est assez long, je détruis l'objet peut etre que je devrais le garder afin d'être sur que Matlab ne me laisse pas de traces qui restent au fils des acquisitions ?

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Ok pour l'IHM et pour Java mais comment fait on pour les désactiver au démarrage ?

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Candidat au Club
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour l'astuce mais est ce que vous ne connaissez pas un moyen de récupérer la mémoire perdue lors d'une acquisition plutôt que d'agrandir la mémoire existante avant acquisition.

    Merci

  10. #10
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    le problème c'est la gestion que matlab fait de sa mémoire :
    en effet, il a besoins de blocs mémoires consécutifs pour stocker les matrices
    de ce fait, a chaque fois que tu créer des matrices, cela fragmente la mémoire, et il a de plus en plus de mal à trouver une place "consécutive "

    le message out of memory ne signifie pas (en général) que tu n'as plus assez de mémoire, mais que tu n'as pas de zone suffisamment grosse pour ta matrice

    effacer au fur et à mesure ses matrices ne change pas grand chose, puis-qu’entre temps d'autre matrices, plus petites, sont venu combler les trous de ta mémoire fragmenté ... qui le reste définitivement malgré le ménage effectué

    la solution la plus efficace est de passer en 64 bits
    après si tu ne peux pas, il y a quelques astuces, mais c'est moins efficace

    edit : regarde ce lien (merci Dut)
    et celui ci

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Il faut aussi se méfier des try-catch.
    Si le code contenu à l'intérieur gère mal la libération de la mémoire en cas de problème, la main est rendue à MATLAB mais la mémoire peut être "perturbée".
    Cela peut arriver quand MATLAB fait appel à des fonctions externes à l'intérieur d'un try-catch.

    Je ne sais pas si c'est le cas ici, mais c'est une piste probable à prendre en compte.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Ne serait-il pas plus propre de faire ceci ?

    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
    fs = 200; % Fréquence d'échantillonage
    dt = 1/fs; % période d'échantillonage
    tacq = 5; %Temps d'acquisition
    masterDevRsrcName = 'TCPIP::169.254.241.13::INSTR';
     
    masterDeviceObj = icdevice('DT8837_DT8837.mdd', masterDevRsrcName);
     
    N = 1;
    for i = 1:N
     
        connect(masterDeviceObj);
     
        if ~strcmpi(masterDeviceObj.Status,'open')
            error('...');
        end
     
        try
     
            % Lecture
     
        catch
     
            deconnect(masterDeviceObj);
            delete(masterDeviceObj);
     
        end
     
    end
    D'autres part, j'éviterais de d'utiliser les variables intermédiaires suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            B1 = B(:,1);
            B2 = B(:,2);
            B3 = B(:,3);
            B4 = B(:,4);
    Elles ne servent à rien et au finale cela ne fait que consommer le double de mémoire pour rien.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Autre chose (et après j'arrête )

    Est-il réellement nécessaire d'afficher les graphiques en même temps que les mesures ?

    Car cela consomme également beaucoup de mémoire si la quantité de données à tracer est significative.

    Par exemple pour un vecteur de 200 Mo :

    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
    function test
     
    m(1) = memory;
     
    X = rand(1,26214400);
     
    m(2) = memory;
     
    (m(2).MemUsedMATLAB-m(1).MemUsedMATLAB)/1024/1024
     
    figure
    plot(X);
     
    m(3) = memory;
     
    (m(3).MemUsedMATLAB-m(1).MemUsedMATLAB)/1024/1024
    ce qui donne sur ma machine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ans =
     
      200.0039
     
     
    ans =
     
      600.0117
    Il est sans doute préférable de séparer l'acquisition du traitement des données.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/10/2011, 17h52
  2. Réponses: 17
    Dernier message: 27/09/2011, 22h31
  3. problème libération mémoire dû aux user control
    Par grogui dans le forum Windows Forms
    Réponses: 25
    Dernier message: 30/03/2009, 09h29
  4. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  5. Problème de mémoire Affichage images
    Par Repti dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2004, 20h06

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