我必须对 10,000 多个 Excel 文件应用简单的格式。我已经有一个多核程序正在运行。它为每个 Excel 文件打开一个新的 Excel 实例。如果重要,此代码当前位于我的表单代码中。
我希望将一个 Excel 实例与许多工作簿一起使用。如果我只使用一个 Excel 实例,是否可以使用多核功能?如何?
- 如果上述答案是否定的,一个更复杂的问题可能是:我应该生成多少个 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 个,然后我就可以在 4 个 Excel 实例中处理文件。我认为这意味着 TrivialExcelEditFunction 只会运行 4 次。相反,这个函数运行了 14 到 27 次。请告诉我哪里出错了。