gpt4 book ai didi

c# - System.Threading.Tasks.Parallel.For 与 Openxml 的意外结果

转载 作者:行者123 更新时间:2023-11-30 22:08:22 25 4
gpt4 key购买 nike

我正在使用下面的代码

SheetData sheetdata = worksheet.Worksheet.GetFirstChild<SheetData>();
System.Threading.Tasks.Parallel.For((excelStartRow + 1), (endRowvalue + 1),
(i) =>
{
Row contentRow = new Row();

//do something

Cell content = createTextCell(
dtspSheetData.Tables[0].Columns.IndexOf(column) + excelStartColumn, i,
dtspSheetData.Tables[0].Rows[j][column.ColumnName],
formatCount, 1, cellFormatCount);
contentRow.AppendChild(content);

sheetData.AppendChild(contentRow);
});

我正在尝试在使用 OpenXML 创建 Excel 时实现并行性。问题是行是在 Excel 文件中创建的,但有些行没有被创建,并且在打开 while 时显示警告。我知道 sheetData 对象被锁定时其他线程正在尝试将该行插入 sheetData 对象。我该如何解决这个问题。

最佳答案

这些 Excel 对象不是为同时从多个线程访问而设计的。鉴于您在此循环中执行的唯一特别“昂贵”的任务是必须序列化的任务,您最好的选择是在一个线程中,在一个常规的 for 循环中简单地完成整个任务。

如果实际计算每个单元格的值很昂贵,那么您可以可能考虑一个并行循环来简单地生成每个单元格的内容,将它们放入内存中的某个中间存储位置,然后复制这些值从单个线程传输到 Excel,但由于此循环似乎没有执行任何如此昂贵的计算,因此无需在此处执行此操作。

关于c# - System.Threading.Tasks.Parallel.For 与 Openxml 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22327645/

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