Bonjour,
pour un programme j'ai besoin de matrice, lorsque j'initialise le tableau (au démarrage de la form) si je dépasse (650,650,650) j’obtiens l'erreur 'System.OutOfMemoryException'.
si je créer une 2em matrice avec des dimentions identique a la 1er je suis restreint en gros a (500,500,500), audela j’obtiens la même erreur.
quelqu'un serait a quoi peut être dû cette erreur ? une limite de stockage sur les tabeau ? la mémoire alloué au programme par l'OS ou VisualStudioExpress2013 ?
Dim Matrice(CInt(ScèneDefautParamètre.MatriceCurseur_Taille_X), CInt(ScèneDefautParamètre.MatriceCurseur_Taille_Z), CInt(ScèneDefautParamètre.MatriceCurseur_Taille_Y)) As Integer ScèneMatrice.MatriceCurseurInfo.matrice = Matrice
A voir également:
Une exception de type 'system.outofmemoryexception' a été levée
Whismeril
Messages postés18638Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 3 octobre 2023629 Modifié le 2 mai 2017 à 11:49
L'erreur apparaît dès la déclaration du tableau ou en cours de fonctionnement?
En général cette erreur est due à une fuite de mémoire.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
je pense avoir trouver ma réponse
https://msdn.microsoft.com/fr-fr/library/b388cb5s(v=vs.90).aspx
pour faire simple il y est expliquer que la taille d'un tableau est limité et varie en fonction du type de variable stocké car celle-ci sollicite + ou - de mémoire, mais elle varie aussi en fonction du system 32/64 bit
est ce qu'il existe une alternative au tableau multidimensionnel pour stocké une grosse quantité de donné autre que fichier ou bdd qui risquerait de ralentir le traitement ?
Whismeril
Messages postés18638Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 3 octobre 2023629 2 mai 2017 à 13:12
Mon pc du boulot est en 64 bit, vs2013 pro, et ça passe au moins (je ne suis pas allé plus loin) jusqu'à 2000,2000,2000 avec des Double.
Comme alternative tu peux écrire une classe avec 3 propriétés et utiliser un tableau ou une List de cette classe.
Tu peux aussi utiliser un tableau de tableaux.
ah oui c déjà mieux que moi ^^ je monte a 1200 avec des byte, sinon je pensai faire un tableau de matrice genre découper ma matrice principal en plusieurs matrice et stocké tous sa dans un tableau mais sa risque d’être plus barbare a géré =/
oui en général quand on commence a bricolé ce n'est pas bon signe pour la suite ou la stabilité du programme. ducoup j'ai regardé au niveau de list() qui est soumis au même contrainte de mémoire et collection qui et mauvais pour la gestion des index, alors je vais peut être m’orientè sur la base de donné et comparé le temps d'exécution d'une même boucle pour les 2 méthode histoire d'avoir un petit aperçu.
Whismeril
Messages postés18638Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 3 octobre 2023629 2 mai 2017 à 14:25
Pour la List, j'ai essayé une liste de listes de listes, avec 0.0 partout, en C# sur 65^3 valeurs ça marche, mais ca mets presque 8 secondes à s'initialiser.
En VB, ca tourne depuis plus de 3 minutes.....
Le codes
Dim liste As New List(Of List(Of List(Of Double)))()
For i As Integer = 0 To 650
liste.Add(New List(Of List(Of Double))())
For j As Integer = 0 To 650
liste(i).Add(Enumerable.Repeat(0.0,650).ToList())
Next j
Next i
liste(1)(2)(3) = 12.3
Mais bon vu le temps d'exécution, c'est pas terrible
sacré différence quand même, bon je ne pence pas exploré toute la matrice a chaque foi mais uniquement une région défini par un curseur mais sa parait être long. sinon il y a toujours la possibilité de décomposer le traitement en plusieurs thread
Whismeril
Messages postés18638Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 3 octobre 2023629 2 mai 2017 à 16:11
C'était 651^3 valeurs.
Je pense que la différence est plutôt au niveau de Visual studio.
Si je compile mode release x64 et que je lance l'exe, le temps est le même pour C#, qu'en déboggage Any Cpu
Par contre pour vb, ça tombe à 10 secondes.
Par contre si je compile en x86, ça dure un temps infini pour vb et c#, dans le gestionnaire des tâches on voit que le processus utilisé 3 à 4 fois moins de mémoire.
La framework a été développée pour C#, qu'il y ait une optimisation par rapport à vb.net n'en m'étonne pas plus que ça.
Qu'en 64 bits ça marche mieux qu'en 32, heureusement !
Par contre que Visual Studio n'optimise pas pareil la compilation en vb et c#, je ne me l'explique pas.