C# 平行分布的传动装置
我试图使用spreadsheetgear和Parallel.ForEach生成一个excel文件,以便在单元格中写入,有时会出现空引用异常。是否需要执行任何设置或配置?如果要跨多个线程同时在同一工作簿上执行工作,则在对工作簿执行此工作时,每个线程都必须通过IWorkbookSet获取/释放相应工作簿上的锁。()和()。否则,您可能会在意外的状态下访问工作簿,并且可能会出现您所看到的各种看似随机的异常。例如:C# 平行分布的传动装置,c#,async-await,spreadsheetgear,C#,Async Await,Spreadsheetgear,我试图使用spreadsheetgear和Parallel.ForEach生成一个excel文件,以便在单元格中写入,有时会出现空引用异常。是否需要执行任何设置或配置?如果要跨多个线程同时在同一工作簿上执行工作,则在对工作簿执行此工作时,每个线程都必须通过IWorkbookSet获取/释放相应工作簿上的锁。()和()。否则,您可能会在意外的状态下访问工作簿,并且可能会出现您所看到的各种看似随机的异常。例如: // Create a new "workbook set". IWorkbookSet
// Create a new "workbook set".
IWorkbookSet wbs = Factory.GetWorkbookSet();
// Add a workbook under this "workbook set".
IWorkbook workbook = wbs.Workbooks.Add();
IWorksheet worksheet = workbook.ActiveWorksheet;
// Do your task (here I just insert single characters into cells in the sheet).
Parallel.ForEach("ABCDEFG", (char c) => {
// Must acquire a workbook set lock before doing anything to the workbook!
wbs.GetLock();
try
{
// Get next row to add character.
int nextRow = worksheet.UsedRange.Row + worksheet.UsedRange.RowCount;
// Add character to cell.
worksheet.Cells[nextRow, 0].Value = c;
}
finally
{
// Must release the workbook set lock.
wbs.ReleaseLock();
}
});
至少在这个简单的例子中,这种方法没有提供任何性能优势,因为每个线程都必须等待轮到它访问工作簿并将字符添加到工作表中。事实上,与以更线性、非多线程的方式执行此任务相比,这种方法无疑会损害性能
因此,根据任务的具体情况以及它在工作簿上所做的工作与在其他可以同时更成功地完成的事情上所做的工作相比,与更线性的方法相比,这种方法可能提供性能优势,也可能不提供性能优势