Tableau multidimentionel System.OutOfMemoryException [Résolu]

Rykudos - 2 mai 2017 à 10:37 - Dernière réponse :  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
Afficher la suite 

Votre réponse

14 réponses

Whismeril
Messages postés
12222
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 novembre 2018
- Modifié par Whismeril le 2/05/2017 à 11:49
0
Merci
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
Commenter la réponse de Whismeril
0
Merci
oui a la création du tableau sur le dim dans le form load
Commenter la réponse de Rykudos
Whismeril
Messages postés
12222
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 novembre 2018
- 2 mai 2017 à 12:04
0
Merci
Alors, je ne sais pas
J'ai VS2013 pro je vais essayer
Commenter la réponse de Whismeril
0
Merci
ok, je t'en remercie d'avance
Commenter la réponse de Rykudos
0
Merci
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 ?
Commenter la réponse de Rykudos
Whismeril
Messages postés
12222
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 novembre 2018
- 2 mai 2017 à 13:12
0
Merci
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.
Commenter la réponse de Whismeril
0
Merci
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é =/
Commenter la réponse de Rykudos
Whismeril
Messages postés
12222
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 novembre 2018
- 2 mai 2017 à 13:53
0
Merci
Bon le tableaux de tableaux ça plante plus bas.
Commenter la réponse de Whismeril
0
Merci
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.
Commenter la réponse de Rykudos
Whismeril
Messages postés
12222
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 novembre 2018
- 2 mai 2017 à 14:25
0
Merci
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
Commenter la réponse de Whismeril
0
Merci
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
Commenter la réponse de Rykudos
0
Merci
mais pourquoi cette différence entre vb et c#? pense tu que je devrai passé en c# pour une meilleur optimisation de mes programmes ?
Commenter la réponse de Rykudos
Whismeril
Messages postés
12222
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 novembre 2018
- 2 mai 2017 à 16:11
0
Merci
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.

Commenter la réponse de Whismeril
0
Merci
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.
Commenter la réponse de Rykudos

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.