#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