Larwin
Messages postés44Date d'inscriptiondimanche 25 novembre 2001StatutMembreDernière intervention24 juillet 2010
-
10 avril 2009 à 10:46
Larwin
Messages postés44Date d'inscriptiondimanche 25 novembre 2001StatutMembreDernière intervention24 juillet 2010
-
11 avril 2009 à 18:24
Bonjour à toutes et à tous.
J'ai un gros problème de mémoire sur IE avec des tableaux. Je m'explique dans ces quelques lignes qui font exploser la mémoire du navigateur alors que cela n'est pas si violent avec firefox, chrome , opéra ou que sais je...
le résultat est toujours le même et sans appel :
explosion de la mémoire d'IE dans le gestionnaires des taches. genre +60Mo pour l'exemple quand sur chrome seulement +2 à +3Mo et ff pareil.
j'ai besoin de gros tableaux a plusieurs dimensions et d'utiliser des tableaux associatifs...
Larwin
Messages postés44Date d'inscriptiondimanche 25 novembre 2001StatutMembreDernière intervention24 juillet 2010 11 avril 2009 à 18:24
bon je n'ai toujours pas trouvé de solution convenable pour ne pas faire exploser la mémoire du processus du navigateur en déclarant directement mes tableau en javascript, je n'y suis donc pris d'une autre façon.
Je fais donc une requete xmlhttprequest et j'exploite le résultat comme si c'était mon tableau que je complete plus tard a ma sauce.
Ca ne semble pas avoir d'impact important sur la mémoire.
Larwin
Messages postés44Date d'inscriptiondimanche 25 novembre 2001StatutMembreDernière intervention24 juillet 2010 10 avril 2009 à 11:31
en fait oui je ne fait que ca...
me suis même fait un autre fichier .html avec tout le code a l'interieur.
et ca explose clairement
je suis sous vista intégrale ie7
et toi Bul3 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 10 avril 2009 à 11:42
IE8+windows XP (sp2) mais bon, à ce niveau ie7+vista ce doit être pareil
testé avec safari, chrome, FF[3], opera, k-meleon...
pas de souci non plus
je disais aussi : t'es sûr qu'initialiser ce tableau est réellement nécessaire ??
à priori, je ne vois pas pourquoi.
Larwin
Messages postés44Date d'inscriptiondimanche 25 novembre 2001StatutMembreDernière intervention24 juillet 2010 10 avril 2009 à 11:51
oui en fait je refais la listview windows en javascript.
donc j'ai besoin de stocker des données qui seront envoyé par un serveur
evidemment y'aura pas 100000 rows mais j'aime les tests un peu excessifs.
je conserverais donc le donnée dans un tableau et les afficherai a la demande dans la listview qui aura un nombre de d'objet dom limité.
je joue sur la mise a jour des données dans le controle a la volé en utilisant ce tableau.
je vais essayer sur un autre poste, et puis tenter avec ie8.
merci de ta réponse bul3
Larwin
Messages postés44Date d'inscriptiondimanche 25 novembre 2001StatutMembreDernière intervention24 juillet 2010 10 avril 2009 à 15:07
le problème reste le même sur ie8, l'utilisation de la mémoire est excessive.
Près de 500 Mo pour l'exemple... :(
j'ai aussi testé sur un autre poste avec la même config ie7 et vista, même problème. Je vais faire un nouveau test avec XP...
En attendant si quelqu'un a une autre idée, il est le bienvenu !
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 10 avril 2009 à 15:09
Bonjour,
ATTENTION mettre window.status =
x; est très gourmant en temps
Concernant la créatin, je te
propose une autre approche pour ne pas avoir à créer à chaque itération un
objet, on en crée un global
exemple
//-------------
function Data(){
this.value = '';
this.extvalue = '';
}
//--------------
function
Enreg(){
this.data = new Object;
this.data.name = new Data();
this.data.surname = new Data();
this.data.age = new Data();
this.data.cp = new Data();
this.data.ville = new Data();
this.data.pays = new Data();
}
entre nous le data est peut être de trop, mais bon...
ta boucle
devient
//-- Lancement creation
var x;
var z = new
Date().valueOf();
var items = new Array(); // le
tableau
var Objet = new Enreg(); //
Creation de l'objet
for (x = 0; x < 100000; x++) {
items.push( Objet);
}
//-- Fin creation
var y = new Date().valueOf();
alert(y - z + 'ms');
Je terminerai en disant qu'en faisant items[x] = Objet; à la place de items.push( Objet); tu grattes encore un peu...
Larwin
Messages postés44Date d'inscriptiondimanche 25 novembre 2001StatutMembreDernière intervention24 juillet 2010 10 avril 2009 à 15:19
je concède que le data est de trop dans l'exemple :)
mais je fais ce test car dans ton exemple la "class" Enreg aura certainement d'autre données du type this.isVisible, this.isOver ...etc. et il se peut qu'il arrive qu'il y ai un this.name a ne pas confondre avec un this.data.name, dans l'exemple.
Je test le code, merci PetoleTeam, mais il me semble que je suis aussi deja allé dans cette direction aussi de mon coté sans succès...
Larwin
Messages postés44Date d'inscriptiondimanche 25 novembre 2001StatutMembreDernière intervention24 juillet 2010 10 avril 2009 à 15:44
bon oui j'avais pas fait trop attention...
c'est pas vraiment ce qu'il me faut ca :) en fait le tableau items sert pas a grand choses ici :) en fait tous les 'Object' seront les mêmes dans le tableau items.
ce qu'il faudrait c'est
var items = new Array(); // le tableau
for (x = 0; x < 100000; x++) {
items.push(new Objet);
}
mais faire cela ne change pas la quantité de donnée en mémoire. 500 Mo de plus :(
raté; j'ai l'impression que ie charge une quantité de donnée importante a la création de class ou de tableau qui s'imbrique les unes dans les autres...