有3千多个图片文件,我现在批量把这些图片缩小,生成一个新文件,
大约转到1千左右就出现内存不足的异常,怎么优化一下啊,望高手赐教,多谢代码如下:string[] files = System.IO.Directory.GetFiles(@"E:\uploadfile");
System.Drawing.Image img;
LEO.Common.Thumbnail thum = new LEO.Common.Thumbnail();
foreach(string file in files) {
img = thum.GetThumbnail(file,400,400);
img.Dispose();
string fileName = file.Substring(file.LastIndexOf("\\"),file.Length-file.LastIndexOf("\\"));
System.Diagnostics.Debug.WriteLine(fileName);
//img.Save(@"d:\new" + file);
}
大约转到1千左右就出现内存不足的异常,怎么优化一下啊,望高手赐教,多谢代码如下:string[] files = System.IO.Directory.GetFiles(@"E:\uploadfile");
System.Drawing.Image img;
LEO.Common.Thumbnail thum = new LEO.Common.Thumbnail();
foreach(string file in files) {
img = thum.GetThumbnail(file,400,400);
img.Dispose();
string fileName = file.Substring(file.LastIndexOf("\\"),file.Length-file.LastIndexOf("\\"));
System.Diagnostics.Debug.WriteLine(fileName);
//img.Save(@"d:\new" + file);
}
也请各位高人光临指教。。
QQ群号22629823
LEO.Common.Thumbnail thum = new LEO.Common.Thumbnail();
private void SaveThumnailImage( string strSourceFile, string strDesDir )
{
Image img = thum.GetThumbnail(strSourceFile,400,400);
string fileName = file.Substring(file.LastIndexOf("\\"),file.Length-file.LastIndexOf("\\"));
System.Diagnostics.Debug.WriteLine(fileName);
img.Save( strDesDir + file);
img.Dispose();
}//Call it
string[] files = System.IO.Directory.GetFiles(@"E:\uploadfile");
foreach(string file in files)
{
SaveThumnailImage( file, @"d:\new" );
//如果还不行的话,这里显式的调用 "GC.Collect()"看看效果
}
代码如下,麻烦老大看怎么优化一下,不胜感激:public System.Drawing.Image GetThumbnail(string fileName,int width,int height)
{
System.Drawing.Image img;
img = System.Drawing.Image.FromFile(fileName); Size size = GetSize(width,height,img.Width,img.Height);
//新建一个bmp图片
Image bitmap = new System.Drawing.Bitmap(size.Width,size.Height);
//新建一个画板
Graphics g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(img, new Rectangle(0, 0, size.Width, size.Height),
new Rectangle(0, 0, img.Width,img.Height),GraphicsUnit.Pixel); g.Dispose();
img.Dispose();
return bitmap;
}
private void SaveThumnailImage( string strSourceFile, string strDesFile )
{
Image img = GetThumbnail(strSourceFile,400,400);
img.Save( strDesFile);
img.Dispose();
}public Image GetThumbnail(string fileName,int width,int height)
{
Image img = System.Drawing.Image.FromFile(fileName); Size size = new Size(width,height); //新建一个bmp图片
Image bitmap = new Bitmap(size.Width,size.Height);
//新建一个画板
Graphics g = Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(img, new Rectangle(0, 0, size.Width, size.Height),
new Rectangle(0, 0, img.Width,img.Height),GraphicsUnit.Pixel); g.Dispose();
img.Dispose();
return bitmap;
}//Call
const string SOURCE_FILE = @"D:\Test.jpg";
for( int i = 0; i < 1500; i++ )
{
SaveThumnailImage( SOURCE_FILE, string.Format( @"D:\temp\{0}.jpg", i ) );
Thread.Sleep( 10 );
GC.Collect();
}
System.Drawing.Image img = System.Drawing.Image.FromFile(fileName);用下面的方式跳过异常可取吗?要怎么跳过异常才更好?
for( int i = 0; i < 1500; i++ )
{
try{
SaveThumnailImage( SOURCE_FILE, string.Format( @"D:\temp\{0}.jpg", i ) );
}
catch{}
}
foreach( string file in files )
{
createImg(file);
}