Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Traitement lots de fichiers

1 réponse
Avatar
Rogério Altman
Bonjour à tous,

J'ai un lot de fichiers à traiter (en l'ocurence une routine qui créé des
imagettes jpg en utilisant la méthode GetThumbnailImage.

Cela se presente comme suit:

*****************
SqlConnection maconnexion = new
SqlConnection("server=localhost;database=portfolio;Trusted_Connection=Yes");

maconnexion .Open();
SqlCommand macommande = new SqlCommand("SELECT fichier FROM matable')",
maconnexion
SqlDataReader reader = macommande .ExecuteReader();
while (reader.Read())
{
string fic = reader["fichier"].ToString();
System.Drawing.Image myimg = System.Drawing.Image.FromFile(fic);
myimg = myimg.GetThumbnailImage((myimg.Width / 5), (myimg.Height / 5), null,
IntPtr.Zero);
myimg.Save((chemin_destination + @"\\" + fic), ImageFormat.Jpeg);
myimg.Dispose();
}
*****************

Probleme: j'ai des milliers d'images à redimensionner et au bout d'un moment
j'ai un message de manque de mémoire.

En asp pur, il suffisait d'adapter le code d'une page pour en faire un
fichier vbs , bien moins gourmand.

J'imagine qu'en c# / asp.net il doit y avoir une solution bien plus
performante que de passer par une page .aspx mais je séche- bien qu'ayant
déjà pas mal cherché sur le net.

Merci de vos idées,
A+

1 réponse

Avatar
Gilles Kohl [MVP]
On Mon, 9 Jun 2008 13:55:03 +0200, "Rogério Altman"
wrote:

Bonjour ?ous,

J'ai un lot de fichiers ?raiter (en l'ocurence une routine qui cr?des
imagettes jpg en utilisant la m?ode GetThumbnailImage.

Cela se presente comme suit:

*****************
SqlConnection maconnexion = new
SqlConnection("server=localhost;database=portfolio;Trusted_Connection=Yes");

maconnexion .Open();
SqlCommand macommande = new SqlCommand("SELECT fichier FROM matable')",
maconnexion
SqlDataReader reader = macommande .ExecuteReader();
while (reader.Read())
{
string fic = reader["fichier"].ToString();
System.Drawing.Image myimg = System.Drawing.Image.FromFile(fic);



Je pense qu'il y a un potentiel probleme ici:

myimg = myimg.GetThumbnailImage((myimg.Width / 5), (myimg.Height / 5), null,
IntPtr.Zero);



En _remplacant_ myimg par myimg.GetThumbnailImage, vous perdez la
référence à l'image d'origine, rendant un Dispose immédiat impossible.

myimg.Save((chemin_destination + @"" + fic), ImageFormat.Jpeg);



Ceci:

myimg.Dispose();



ne dispose que du thumbnail, mais je crains que les images d'origine
subsistent dans la mémoire.

}
*****************

Probleme: j'ai des milliers d'images ?edimensionner et au bout d'un moment
j'ai un message de manque de m?ire.

En asp pur, il suffisait d'adapter le code d'une page pour en faire un
fichier vbs , bien moins gourmand.

J'imagine qu'en c# / asp.net il doit y avoir une solution bien plus
performante que de passer par une page .aspx mais je s?e- bien qu'ayant
d? pas mal cherch?ur le net.

Merci de vos id?,



Essayez ceci: (non testé)

string fic = reader["fichier"].ToString();
System.Drawing.Image myimg = System.Drawing.Image.FromFile(fic);
System.Drawing.Image mythumb;

mythumb = myimg.GetThumbnailImage((myimg.Width / 5), (myimg.Height /
5), null, IntPtr.Zero);
mythumb.Save((chemin_destination + @"" + fic), ImageFormat.Jpeg);
mythumb.Dispose();
myimg.Dispose();

Amicalement,
Gilles.

Regards,
Gilles [MVP].

(Please reply to the group, not via email.
Find my MVP profile with past articles / downloads here:
http://www.gilleskohl.de/mvpprofile.htm)