banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 20 May 2010 20:25

jean94
Participant assidu
Date d'inscription: 13 Aug 2009
Messages: 436

unable to allocate memory

Bonjour.

Je test un MBX que j'ai créé, sur mon C:\, après  ± 40min j’ai le message suivant  « unable to allocate memory ». Je me demande à quoi est du ce message d’erreur? J’ai vérifié et j’ai la version de Mapinfo 10.0.1.

Je comprends mal la nature de l’erreur, car il s’agit d’une boucle

Par exemple :
Cherche un caractère en particulier
Supprime le caractère et remplace par un autre (point par une espace)
Sauvegarde la table
Recommence avec un autre caractère

Et donc si je peux pour un caractère pourquoi je manque de mémoire après plusieurs passages dans la boucle.  Avec 3 essaies j’ai aussi réalisé que le message n’apparait pas toujours au même caractère.

Merci!
JF

Hors ligne

 

#2 Fri 28 January 2011 20:33

jean94
Participant assidu
Date d'inscription: 13 Aug 2009
Messages: 436

Re: unable to allocate memory

Bonjour,

Du nouveau concernant ce billet,

Bien que j'ai toujours le même problème, si je travail sur le C:\ c'est beaucoup plus rapide.
Quand je divise mon fichier en section de 100 000, l'erreur ne se produite pas si je ferme et re-ouvre mapinfo entre les traitements, il ne s'agît donc pas du code ni des données.
Avec des fichiers de 500 000 entrées et éventuellement des millions, ça devient lourd à traiter.

Alors mes questions est les suivantes:
1. Existe-t-il une fonction qui supprime la mémoire utilisé par mapinfo sans fermer le logiciel
2. Augmenter le RAM sur ma machine résoudrait-il le problème où passer a Windows 7 64 bit?

Merci et Bonne fin de semaine....il est 17h quelque part.

Dernière modification par jean94 (Fri 28 January 2011 20:34)

Hors ligne

 

#3 Sat 29 January 2011 19:38

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: unable to allocate memory

Bonjour,

N'étant pas un utilisateur de MAPINFO je tente une réponse en tant que programmeur. Ce genre de message apparaît lorsque les ressources que vous utilisez ne sont pas libérées. Compte tenu de votre premier message :
Fermez vous la table et la connexion à la base de donnée une fois le traitement effectué ?
Le mieux serait que vous postiez le code de votre mbx.

Existe-t-il une fonction qui supprime la mémoire utilisé par mapinfo sans fermer le logiciel


ça non quelque soit le logiciel

il ne s'agît donc pas du code


Si !

Cela s'appelle une fuite mémoire, ou une sur consommation de ressources.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#4 Mon 31 January 2011 15:23

jean94
Participant assidu
Date d'inscription: 13 Aug 2009
Messages: 436

Re: unable to allocate memory

Bref un condensé de mon code...j'ai enlevé la boite de dialog et tout

Code:

    print "Remplace Caractère"
    
    dim CharSpCounter as smallint
    dim CharSpSearch as string
    dim CharSpReplace as String
    
    CharSpCounter = 0
    
    Do while CharSpCounter < 501
    
    if CharSpCounter = 0 then CharSpSearch = "-" CharSpReplace = " "
    ...
    elseif CharSpCounter = 500 then CharSpSearch = "à" CharSpReplace = "a"
    end if
    
    Update adresse Set strNewCol = StringReplace(aChampFonction, CharSpSearch, CharSpReplace)
    Commit table adresse
     Set Table adresse FastEdit On Undo Off
     aChampFonction = ColumnInfo(adresse,"col"+i_numcols,COL_INFO_NAME)
     Commit table adresse
     Set Table adresse FastEdit On Undo Off
     Print (Timer()-nElapsed) & " / ( "& CharSpSearch & " ) / temps écoulé: " & (Timer() - nTime) 
     nTime = Timer() 
    
    CharSpCounter = CharSpCounter + 1
    
    Loop
 
' Et voici la Fonction

'*************************************Recherche et remplace
Function STRINGReplace
(ByVal sToBeSearched As String
, ByVal sSearchFor As String
, ByVal sReplaceWith As String) As String
 
Dim i, nLenR, nLenS As Integer
OnError GoTo ErrorOccured
 
STRINGReplace = sToBeSearched
 
 nLenR = Len(sReplaceWith)
 nLenS = Len(sSearchFor)
 i = InStr(1, sToBeSearched, sSearchFor)
 Do While i > 0
    sToBeSearched = Left$(sToBeSearched,i - 1) + sReplaceWith
                + Right$(sToBeSearched, Len(sToBeSearched) - ((i - 1) + nLenS))
    i    = InStr(i + nLenR, sToBeSearched, sSearchFor)
 
 Loop
 STRINGReplace = sToBeSearched
  Exit Function
'-------------------------
ErrorOccured:
End Function

Je travail sur une table d'environ un demi-millions d'entrées...et sa bloc vers la 300ième loop..qui n'a rien de différent

Fermez vous la table et la connexion à la base de donnée une fois le traitement effectué ?


Je ne ferme pas les tables mais je les enregistres

Merci

Dernière modification par jean94 (Mon 31 January 2011 15:28)

Hors ligne

 

#5 Mon 31 January 2011 16:03

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: unable to allocate memory

Bonjour,

Loin de" connaître le langage utilisé pour générer des mbx, mais cela ressemble à du VB6.

Dans ce cadre :

Set strNewcol = ....

à la fin avant le loop

set strNewcol=nothing

ensuite le Set Table adresse ...
Commit (je suppose effectue la modif dans la table)
Quand est ce que la table est fermée le commit le fait automatiquement ?

Je suppose que des spécialistes du mbx présent ici pourrons vous renseigner.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#6 Mon 31 January 2011 17:23

jean94
Participant assidu
Date d'inscription: 13 Aug 2009
Messages: 436

Re: unable to allocate memory

Très similaire au VB6 en effet...

Commit enregistre la table...mais la table n'est jamais fermé.

Merci...j'effectue un test avec des close table / open table à certains endroits dans ma boucle pour vérifier si sa libère la mémoire ou pas

JF

Hors ligne

 

Pied de page des forums

Powered by FluxBB