gpt4 book ai didi

c# - 是否可以在一个 Excel 实例中使用多核?

转载 作者:行者123 更新时间:2023-11-30 15:01:17 28 4
gpt4 key购买 nike

我必须对 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 次。请告诉我哪里出错了。

最佳答案

创建 N 个任务/线程来执行处理,其中“N”是您机器上的核心数。为每个任务/线程提供一个 Excel 实例。

您将无法从多个线程控制单个实例(至少效率不高;它一次只能处理一个线程的任务),而且创建如此多的 Excel 实例效率非常低。

关于c# - 是否可以在一个 Excel 实例中使用多核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14481324/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com