我是一名初级程序员,我正在尝试解决一项任务。使用 c# .net 4.0 我在文件夹中运行,选择所有 *.xml 文件,并将每个文件写入具有新扩展名 *.bin 的新文件夹。对于编写之前的每个文件,我正在应用由另一个程序员编写的算法,我不知道它的实现。
所以我读取 *.xml 文件,将其反序列化并将其写入新的 *.bin 文件。当我没有使用并行编程时,我有 1 分钟的时间来处理 2000 个文件。现在我决定使用Task应用并行编程。现在我为每个文件创建新任务(所有处理(读取-反序列化-写入)都在一个任务中),现在我有 40 秒。但我认为并行编程帮助我将时间减少到 25-30 秒。
请给出您的意见,我做错了什么以及我必须如何意识到这一点。谢谢。
byte[] buffer;
using (Stream stream = new FileInfo(file).OpenRead())
{
buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
}
foreach (var culture in supportedCultures)
{
CultureInfo currentCulture = culture;
Tasks.Add(Task.Factory.StartNew(() =>
{
var memoryStream = new MemoryStream(buffer);
Task<object> serializeTask = Task.Factory.StartNew(() =>
{
return typesManager.Load(memoryStream, currentCulture);
}, TaskCreationOptions.AttachedToParent);
string currentOutputDirectory = null;
if (outputDirectory != null)
{
currentOutputDirectory = outputDirectory.Replace(PlaceForCultureInFolderPath,
currentCulture
.ToString());
Directory.CreateDirectory(currentOutputDirectory);
}
string binFile = Path.ChangeExtension(Path.GetFileName(file), ".bin");
string binPath = Path.Combine(
currentOutputDirectory ?? Path.GetDirectoryName(file),
binFile);
using (FileStream outputStream = File.OpenWrite(binPath))
{
try
{
new BinaryFormatter().Serialize(outputStream,serializeTask.Result);
}
catch (SerializationException e)
{
ReportCompilationError(e.Message, null);
}
}
}));
}