是多线程并行写,1行代码用时可超过500s,该怎么解决

Aspose.Cells, Version=18.10.0.0,遇到问题是多线程并行写,就这一行代码用时可超过500s,CPU和内存足够用,高峰期,CPU和内存有峰,但是最高只用CPU30%,内存也只用10G,最高限制线程30个并行。请问有什么解决办法吗?


@SalesDhorde
Aspose.Cells只支持多线程的读取操作,暂时不支持多线程写操作。关于多线程读取数据,请参考以下文档。

每个线程用的workbook 是隔离的,不存在并发,只是可能系统资源可能存在竞争

@SalesDhorde
我们建议您尝试使用我们的最新版本Aspose.Cells for .NET v24.7.

如果您仍然发现问题,请分享您的Excel模板文件和可运行的测试代码,以便我们重现问题。我们很快就会检查。

刚试过新版。在测试时,好像每个workbook最后生成的时间相对比较均匀。
f2f41c44848f55e3573091f20ba08ea.png (50.0 KB)

9e46c840534df0ca983aa209249f805.png (77.2 KB)

@SalesDhorde
新版本测试依然有耗时严重的问题吗?如果依然有问题,请提供Excel模板文件和可运行的测试代码。我们很快就会检查。

您好,最新版本依然是有问题的
740f461430fea2f295cd239e6b1789d.png (124.4 KB)

新建文件夹 (2).zip (10.0 MB)

@SalesDhorde
通过使用以下样例代码和样例文件在最新版本v24.7上进行测试,我们发现加载和保存耗时都是可以接受的。

DateTime start = DateTime.Now;
Workbook wb = new Workbook(filePath + "JGWBPJ_20240731.XLSX");
Console.WriteLine("加载耗时: " + DateTime.Now.Subtract(start));

start = DateTime.Now;
wb.Save(filePath + "out_net.xlsx");
Console.WriteLine("保存xlsx耗时: " + DateTime.Now.Subtract(start));

start = DateTime.Now;
wb.Save(filePath + "out_net.xls");
Console.WriteLine("保存xls耗时: " + DateTime.Now.Subtract(start));

输出结果:

加载耗时: 00:00:02.7000006
保存xlsx耗时: 00:00:02.9427922
保存xls耗时: 00:00:00.5822909

你的样例代码包含了很多和Aspose.Cells无关的代码,样例代码里还使用到了IWorkbook等其他操作Excel的类库。我们无法编译和评估耗时的问题是否由Aspose.Cells引起。你愿意提供一个可运行的console代码来复现问题吗? 我们很快就会检查。

其他类库时解决apose.cell 无法生成出excel95版本的问题,这个日志里根本没有涉及这一步,你们可以试试,这种30万行左右的数据在30-50个线程一起跑时,最后的耗时

@SalesDhorde,

请注意,与 XLSX 文件格式相比,XLS 文件格式对行数和列数的限制较少。XLS 文件最多可以有 65,536 行和 256 列,并且不能超过此数字。因此,单个工作表中无法保存 300K 行。

如果您仍然认为 Aspose.Cells 存在时间消耗问题或其他问题,请仅使用 Aspose.Cells for .NET API(请不要涉及其他库或组件)创建一个独立的(可运行的)控制台 .NET程序,并在此处将其提供给我们,以便我们重现该问题。我们将尽快检查您的问题。