Tableau multidimentionel System.OutOfMemoryException

Résolu
Rykudos - 2 mai 2017 à 10:37
 Rykudos - 2 mai 2017 à 17:02
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

14 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
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
0
oui a la création du tableau sur le dim dans le form load
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
2 mai 2017 à 12:04
Alors, je ne sais pas
J'ai VS2013 pro je vais essayer
0
ok, je t'en remercie d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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 ?
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
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.
0
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é =/
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
2 mai 2017 à 13:53
Bon le tableaux de tableaux ça plante plus bas.
0
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.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
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
0
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
0
mais pourquoi cette différence entre vb et c#? pense tu que je devrai passé en c# pour une meilleur optimisation de mes programmes ?
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
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.

0
ok, je te remercie pour les info et le temps que tu ma accordé je penserai a faire mes teste a partir de l'exe et non de VS.
0
Rejoignez-nous