2016-10-24 15 views
0

パフォーマンスの向上として、10個のXMLファイルを並列に読み込み、データベースにデータを挿入したいと考えています。並列複数のXMLファイルを読み込んでデータベースに挿入する

1.読み込みとデータベースの挿入を並行して行うには? つまり、1つのファイルが既に読み込まれているXMLファイルのデータを読み込んでいるとき。

2.複数のXMLファイルの処理(読み取りとデータベースの挿入を含む)を並行して行う方法。 つまり、同時に10件のファイルを処理しています。 言語C#

Used Task.Factory.StartNew(() => Method1(), CancellationToken.None, 
          TaskCreationOptions.LongRunning, TaskScheduler.Default); 

が、方法方法1()内に一度だけ呼ばれるばかり。

+0

'Parallel.ForEach(...)https://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.foreach(v=vs.110).aspx –

+0

Even Parallel .ForEach()は同じ結果を返します。Method1()の内部にあるMethod2()は一度だけ呼び出されます。 – SanhitaPC

+0

なので、一方のスレッドがディスクを読み込み、もう一方のスレッドがデータベースに書き込むようにしたいですか?内部キューを使用します。 https://msdn.microsoft.com/en-us/library/dd267265(v=vs.110).aspx –

答えて

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); 

このメソッドは、データベースへのディスク書き込みデータから独立した読み取りファイルを提供しています。

関連する問題