10,000以上のExcelファイルに単純な書式を適用する必要があります。私はすでにマルチコアプログラムを動作させています。すべてのExcelファイルに対して新しいExcelインスタンスを開きます。重要な場合、このコードは現在私のフォームコード内にあります。
1つのExcelインスタンスを多くのブックで使用したいと思っていました。Excelのインスタンスを1つだけ使用する場合、マルチコア機能を利用することはできますか?どのように?
-上記の答えが「いいえ」の場合、より複雑な質問は次のようになります。Excelのインスタンスをいくつ生成する必要があり、各インスタンス間でブックを分割するにはどうすればよいですか。
ここの現在のコード:
private void SelectFilesButtonClick(object sender, EventArgs e)
{
var listOfExcelFiles = OpenExcel.FileNames.ToList();
Parallel.ForEach(listOfExcelFiles, TrivialExcelEditFunction);
}
private void TrivialExcelEditFunction(string file)
{
//Open instance of Excel
//Do processing
//Close instance of Excel
}
以下のコードを更新しましたが、それでも適切なコア数に制限されていません。理由はわかりません。
private void SelectFilesButtonClick(object sender, EventArgs e)
{
var listOfExcelFiles = OpenExcel.FileNames.ToList();
int cores = Environment.ProcessorCount;
//Split one list into list of lists. Number of lists based on number of cpu cores
List<List<object>> listOfLists = Split(listOfExcelFiles, cores);
//Limits number of threads to number of cores
Parallel.ForEach(listOfLists, new ParallelOptions { MaxDegreeOfParallelism = cores }, EditExcel);
}
private void TrivialExcelEditFunction(string file)
{
//Open instance of Excel
foreach (string file in files)
{
//Do processing
}
//Close instance of Excel
}
4つのコアがあるとしましょう。私の考えは、ファイルのリストを4つの等しいリストに分割し、スレッドを4つに制限することでした。そうすれば、Excelの4つのインスタンスでファイルを処理できるようになります。これは、TrivialExcelEditFunctionが4回しか実行されないことを意味すると思いました。代わりに、この関数は14〜27回実行されています。どこが悪かったのか教えてください。