服务器大量删除图片,占用内存不断增加解决办法
服务器大量删除图片,占用内存不断增加
写了个批量删除服务器中图片的winform程序,但是在运行的时候内存不断增加,占用内存从几十M上升到几G,服务器上图片有几万张,请帮忙看下程序哪有问题导致内存泄露。
void deleteFile1() //区间删除
{
if (textBox1.Text == "")
{
richTextBox1.AppendText("必须首先指定根目录" + "\r\n");
return;
}
DateTime dt2 = dateTimePicker2.Value;
string month2 = dt2.ToString("MM");
int day2 = dt2.Day;
DateTime dt3 = dateTimePicker3.Value;
string month3 = dt3.ToString("MM");
int day3 = dt3.Day;
string imagePath = "";
for (int j = day2; j <= day3; j++)
{
string t = j.ToString();
if (t.Length == 1)
{
t = "0" + t;
}
else
{
t = t;
}
imagePath = textBox1.Text + "\\" + month2 + "\\" + t; //获取根目录+月份+日期的路径
if (!Directory.Exists(imagePath))
{
richTextBox1.AppendText("选择区间内目录不存在,无法删除\r\n");
return;
}
string[] hourDirectories = Directory.GetDirectories(imagePath);
foreach (string hourfp in hourDirectories) //获取小时文件夹路径
{
this.BeginInvoke(new MethodInvoker(() =>
{
richTextBox1.AppendText("小时目录路径:" + hourfp + "\r\n");
}));
string[] hourFies = Directory.GetFiles(hourfp);//获取小时文件夹内的所有文件
for (int i = 0; i < hourFies.Length; i++) //清空小时文件夹内文件
{
File.Delete(hourFies[i]);
this.BeginInvoke(new MethodInvoker(() =>
{
label2.Text = string.Format(hourfp + "已删除小时文件夹文件:{0}/{1}", i + 1, hourFies.Length);
}));
}
Directory.Delete(hourfp, true);//删除当日所有小时文件夹
this.BeginInvoke(new MethodInvoker(() =>
{
richTextBox1.AppendText("已删除" + hourfp + "小时目录\r\n");
}));
}
Directory.Delete(imagePath, true);
this.BeginInvoke(new MethodInvoker(() =>
{
richTextBox1.AppendText("已删除" + imagePath + "日目录\r\n");
}));
}
}
------解决思路----------------------

------解决思路----------------------
1.先查看一下,你程序关掉的时候,进程还在不在,有没有死进程
2.确定进程已经不在了之后,如果内存还下不来,看看到底哪个进程内存暴涨
3.如果没有任何进程内存暴涨,而总的内存却暴涨,恭喜你,中病毒了,而且此病毒很高级,运行着居然不在进程里显示
写了个批量删除服务器中图片的winform程序,但是在运行的时候内存不断增加,占用内存从几十M上升到几G,服务器上图片有几万张,请帮忙看下程序哪有问题导致内存泄露。
void deleteFile1() //区间删除
{
if (textBox1.Text == "")
{
richTextBox1.AppendText("必须首先指定根目录" + "\r\n");
return;
}
DateTime dt2 = dateTimePicker2.Value;
string month2 = dt2.ToString("MM");
int day2 = dt2.Day;
DateTime dt3 = dateTimePicker3.Value;
string month3 = dt3.ToString("MM");
int day3 = dt3.Day;
string imagePath = "";
for (int j = day2; j <= day3; j++)
{
string t = j.ToString();
if (t.Length == 1)
{
t = "0" + t;
}
else
{
t = t;
}
imagePath = textBox1.Text + "\\" + month2 + "\\" + t; //获取根目录+月份+日期的路径
if (!Directory.Exists(imagePath))
{
richTextBox1.AppendText("选择区间内目录不存在,无法删除\r\n");
return;
}
string[] hourDirectories = Directory.GetDirectories(imagePath);
foreach (string hourfp in hourDirectories) //获取小时文件夹路径
{
this.BeginInvoke(new MethodInvoker(() =>
{
richTextBox1.AppendText("小时目录路径:" + hourfp + "\r\n");
}));
string[] hourFies = Directory.GetFiles(hourfp);//获取小时文件夹内的所有文件
for (int i = 0; i < hourFies.Length; i++) //清空小时文件夹内文件
{
File.Delete(hourFies[i]);
this.BeginInvoke(new MethodInvoker(() =>
{
label2.Text = string.Format(hourfp + "已删除小时文件夹文件:{0}/{1}", i + 1, hourFies.Length);
}));
}
Directory.Delete(hourfp, true);//删除当日所有小时文件夹
this.BeginInvoke(new MethodInvoker(() =>
{
richTextBox1.AppendText("已删除" + hourfp + "小时目录\r\n");
}));
}
Directory.Delete(imagePath, true);
this.BeginInvoke(new MethodInvoker(() =>
{
richTextBox1.AppendText("已删除" + imagePath + "日目录\r\n");
}));
}
}
------解决思路----------------------
------解决思路----------------------
1.先查看一下,你程序关掉的时候,进程还在不在,有没有死进程
2.确定进程已经不在了之后,如果内存还下不来,看看到底哪个进程内存暴涨
3.如果没有任何进程内存暴涨,而总的内存却暴涨,恭喜你,中病毒了,而且此病毒很高级,运行着居然不在进程里显示