cs_jibus
Messages postés17Date d'inscriptionsamedi 24 janvier 2004StatutMembreDernière intervention31 mars 2008
-
31 mars 2008 à 05:17
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
31 mars 2008 à 09:52
Salut à tous,
J'ai actuellement une petite appli qui me sauvegarde dans un fichier .resources pas mal d'images (plus de 1000).
Mon *@/!% problème vient de ResourceWriter :
IResourceWriter rw = new ResourceWriter(path);
foreach (ListViewItem i in items)
{
Bitmap bp = new Bitmap(info.Path);
rw.AddResource(i.Text, bp);
}
rw.Generate();
rw.Close();
Avec ce code, le addResource() est censé ajouter à une liste chaque item que je veux mettre dans mon fichier .resources, puis le Generate() construit le fichier à l'aide de cette liste. Sauf que avec plus de 1000 objets j'ai comme qui dirait un léger OutOfMemory. Le RW semble faire un free complet tout à la fin de la création du fichier et non après chaque ajouts d'item.
J'ai donc penser faire un free tout les 10 ajouts et ajouter à chaque fois le reste des data à la suite de mon fichier :
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
IResourceWriter rw = new ResourceWriter(fs);
foreach (ListViewItem i in items)
{
Bitmap bp = new Bitmap(info.Path);
rw.AddResource(i.Text, bp);
if ((i.Index%10 0) || (i.Index (items.Count - 1)))
{
//generate and free resource writer
rw.Generate();
rw.Close();
//free stream
fs.Dispose();
fs.Close();
//reload file
fs = new FileStream(path, FileMode.Append, FileAccess.Write);
rw = new ResourceWriter(fs);
}
}
Cette solution à l'air de bien m'ajouter les images dans le fichier .resources, car il est volumineux, mais les data ou le header doivent être endommagé car à la relecture je ne peux lire que les 10 premiers items ajouté.
J'ose vraiment espérer que l'un d'entre vous à une solution car moi je bloque...
cs_jibus
Messages postés17Date d'inscriptionsamedi 24 janvier 2004StatutMembreDernière intervention31 mars 2008 31 mars 2008 à 05:30
Désolé pour les quotes, je ne trouve pas où modifier mon message.. donc je reposte.
Salut à tous, J'ai actuellement une petite appli qui me sauvegarde dans un fichier .resources pas mal d'images (plus de 1000).
Mon *@/!% problème vient de ResourceWriter :
IResourceWriter rw = new ResourceWriter(path);
foreach (ListViewItem i in items)
{
Bitmap bp = new Bitmap(info.Path);
rw.AddResource(i.Text, bp);
}
rw.Generate();
rw.Close();
Avec ce code, le addResource() est censé ajouter à une liste chaque item que je veux mettre dans mon fichier .resources, puis le Generate() construit le fichier à l'aide de cette liste. Sauf que avec plus de 1000 objets j'ai comme qui dirait un léger OutOfMemory. Le RW semble faire un free complet tout à la fin de la création du fichier et non après chaque ajouts d'item.
J'ai donc penser faire un free tout les 10 ajouts et ajouter à chaque fois le reste des data à la suite de mon fichier :
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
IResourceWriter rw = new ResourceWriter(fs);
foreach (ListViewItem i in items)
{
Bitmap bp = new Bitmap(info.Path);
rw.AddResource(i.Text, bp);
if ((i.Index%10 0) || (i.Index (items.Count - 1)))
{
//generate and free resource writer
rw.Generate();
rw.Close();
//free stream
fs.Dispose();
fs.Close();
//reload file
fs = new FileStream(path, FileMode.Append, FileAccess.Write);
rw = new ResourceWriter(fs);
}
}
Cette solution à l'air de bien m'ajouter les images dans le fichier .resources, car il est volumineux, mais les data ou le header doivent être endommagé car à la relecture je ne peux lire que les 10 premiers items ajouté.
J'ose vraiment espérer que l'un d'entre vous à une solution car moi je bloque...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 31 mars 2008 à 09:52
Sur un éditeur Windows (notepad ou autre):
IResourceWriter rw = new ResourceWriter(path);
foreach (
ListViewItem i in items) {
Bitmap bp = new Bitmap(info.Path);
rw.AddResource(i.Text, bp);
}
rw.Generate();
rw.Close();
Avec ce code, le addResource() est censé ajouter à une liste chaque item que je veux mettre dans mon fichier .resources, puis le Generate() construit le fichier à l'aide de cette liste. Sauf que avec plus de 1000 objets j'ai comme qui dirait un léger OutOfMemory. Le RW semble faire un free complet tout à la fin de la création du fichier et non après chaque ajouts d'item. J'ai donc penser faire un free tout les 10 ajouts et ajouter à chaque fois le reste des data à la suite de mon fichier:
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
IResourceWriter rw = new ResourceWriter(fs);
foreach (ListViewItem i in items) {
Bitmap bp = new Bitmap(info.Path);
rw.AddResource(i.Text, bp); if ((i.Index%10 0) || (i.Index (items.Count - 1))) {
//generate and free resource writer
rw.Generate();
rw.Close();
//free stream fs.Dispose();
fs.Close(); //reload file
fs = new FileStream(path, FileMode.Append, FileAccess.Write);
rw = new ResourceWriter(fs);
}
}