随着性能的提高,我希望并行读取10个XML文件并在数据库中插入数据。
1.如何实现并行读取和数据库插入? 即,当一个文件正在读取已读取的XML文件的插入数据时。
2.如何并行处理多个XML文件(包括读取和数据库插入)。 即同时处理10个文件。 语言C#
Used Task.Factory.StartNew(() => Method1(), CancellationToken.None,
TaskCreationOptions.LongRunning, TaskScheduler.Default);
但是Method1()中的方法只被调用一次。
答案 0 :(得分:1)
使用标准的生产者/消费者模式。
var xmlFiles = new BlockingCollection<XDocument>();
var readFiles = Task.Run(() =>
{
try
{
foreach (var file in Directory.EnumerateFiles(".", "*.xml"))
xmlFiles.Add(XDocument.Load(file));
}
finally { xmlFiles.CompleteAdding(); }
});
var processFiles = Task.Run(() =>
{
foreach (var xml in xmlFiles.GetConsumingEnumerable())
{
// Insert data to database
}
});
Task.WaitAll(readFiles, processFiles);
此方法从磁盘提供独立的读取文件并将数据写入数据库。