私はジュニアプログラマーで、課題を解決しようとしています。c#.net 4.0を使用して、フォルダーを実行し、すべての* .xmlファイルを選択し、各ファイルを新しい拡張子*.binの新しいフォルダーに書き込みます。書く前のファイルごとに、別のプログラマーによって書かれたアルゴリズムを適用していますが、それが実現されているかどうかはわかりません。
そこで、*。xmlファイルを読み取り、逆シリアル化して、新しい*.binファイルに書き込みます。並列プログラミングを使用していないときは、2000ファイルで1分かかりました。そして今、私はTaskで並列プログラミングを適用することにしました。ここで、ファイルごとに新しいタスクを作成し(すべての処理(読み取り-逆シリアル化-書き込み)は1つのタスクに含まれます)、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);
}
}
}));
}