10万张照片一起转base64时,内存不足,后面的就无法编码。
void start(string dir, string dir64)
{
string base64;
int cnt = 0;
int fileno = 0;
if (!textBox1.Text.Equals(""))
fileno = int.Parse(textBox1.Text.ToString());
DirectoryInfo d = new DirectoryInfo(dir);
FileSystemInfo[] fsinfos = d.GetFileSystemInfos();
FileInfo myfile = new FileInfo(dir64 + "\\base64_" + fileno.ToString() + ".txt");
StreamWriter sw = myfile.CreateText();
FileInfo myfileerror = new FileInfo(dir64 + "\\base64_error.txt");
StreamWriter sw2 = myfileerror.CreateText();
foreach (FileSystemInfo fsinfo in fsinfos)
{
cnt++;
if (cnt % 10000 == 0)
{
sw.Flush();
sw.Close();
fileno++;
myfile = new FileInfo(dir64 + "\\base64_" + fileno.ToString() + ".txt");
sw = myfile.CreateText();
GC.Collect();
}
if (fsinfo is DirectoryInfo) //判断是否为文件夹
{
start(fsinfo.FullName, dir64);//递归调用
}
else
{
try
{
base64 = ImageFile2Base64(fsinfo.FullName, fsinfo.Name);//输出文件的全部路径
sw.WriteLine(cnt.ToString() + "," + fsinfo.FullName + "," + base64);
}
catch (Exception e)
{
sw2.WriteLine(cnt.ToString() + "," + fsinfo.FullName + ",error:"+e.ToString());
}
}
label3.Text = "已处理" + cnt.ToString() + "条";
}
sw.Close();
sw2.Close();
}