我写了一个非常简单的程序可以在外部硬盘上找到图片,并将它们放入文件夹中。听起来非常简单,但由于某种原因,在执行此操作时会出现“内存不足”异常。
我已经在装有 4 GB RAM 的 64 位 Win10 和 32 GB RAM 的 64 位 Win10 上进行了测试,但仍然在两个系统上都遇到了“内存不足”的异常。
我的平台目标是 x64。
以下是错误发生的代码:
所以我的问题是: 异常是由什么原因引起的,我该如何修复呢?
我已经在装有 4 GB RAM 的 64 位 Win10 和 32 GB RAM 的 64 位 Win10 上进行了测试,但仍然在两个系统上都遇到了“内存不足”的异常。
我的平台目标是 x64。
以下是错误发生的代码:
string[] filePaths = Directory.GetFiles(Stien, "*.*", SearchOption.AllDirectories);
foreach (string file in filePaths)
{
string[] TempValue1 = file.Split(new[] { @"\" }, StringSplitOptions.None);
string FileName = TempValue1[TempValue1.Length - 1];
if (FileName.Contains(SøgeTerm)) //Checks if the name contains the search-term.
{
if (!SortDate) //If the program was told not to sort by date.
{
try
{
File.Copy(file, destination + @"\" + FileName, true);
Console.WriteLine(FileName + " => " + destination + @"\" + FileName);
}
catch (Exception e)
{
Console.WriteLine("Fejl: " + e.ToString());
}
}
else
{
Image Billede = Bitmap.FromFile(file);
string date;
try
{
PropertyItem propItem = Billede.GetPropertyItem(36867);
date = r.Replace(Encoding.UTF8.GetString(propItem.Value), "-", 2);
date = date.Split(new[] { ' ' }, StringSplitOptions.None)[0];
propItem = null;
}
catch
{
date = "UKENDT";
}
//
if (!Directory.Exists(destination + @"\" + date))
{
Directory.CreateDirectory(destination + @"\" + date);
Console.WriteLine(destination + @"\" + date);
}
File.Copy(file, destination + @"\" + date + @"\" + FileName, true); //Copies the file, and places it into the fitting folder.
Console.WriteLine(FileName + " => " + destination + @"\" + "" + date + @"\" + FileName);
date = null; //I thought this might helped clearing some memory.
Billede = null;
}
}
}
所以我的问题是: 异常是由什么原因引起的,我该如何修复呢?
Dispose
,你可以在WriteLine
中使用格式化字符串来代替字符串拼接(如果你使用的是 C# 6,则最好使用字符串插值)。 - niceman