我必须将简单的格式应用于10,000个以上的Excel文件。我已经有了一个多核计划。它为每个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次之间运行。请告诉我我错了哪里。
工作完美。没有必须重复打开和关闭Excel的开销,我将处理时间从每3秒1个文件减少到每秒5个文件。 – Brandon