0

我有一个程序可以在 excel 中插入数据并创建图表。所有的“数字运算”都在程序中完成(使用 linq),所以 excel 仅用于创建图形。最终的 excel 有大约 300 个工作表(50 个数据表和 250 个图表)。这是性能问题。虽然 linq 和 regex 的操作非常快,但 excel 生成所有图形需要 4 分钟以上。我考虑了并行扩展并将图表拆分为 5 个 excel 文件。

我的问题是我是否正在浪费时间。我的意思是:4 分钟内绘制 250 张图相当于每张图 1 秒。excel 是否应该比这更快地并行生成图表?我还注意到 excel(与大多数程序一样)在文件较大时运行速度较慢。如果你有一个 10MB 的 excel 并插入一个图表需要 1 秒,如果你有一个 10KB 的 excel 它现在插入(可能只是我的印象......)。

如果答案是我应该使用并行扩展,我应该使用相同的 excel 应用程序和不同的 excel 文件还是更好地为每个文件使用不同的 excel 应用程序?

4

1 回答 1

1

尝试使用 Excel 执行此操作会导致很多痛苦。为您的图表使用众多出色的 .net 图表库之一。

如果出于其他原因您必须使用 Excel,那么您将需要单独的工作簿。一次只能有一个线程可以对工作簿进行操作。我相信多个线程可以在多个工作簿上并行运行,虽然我自己从未做过,但我看不出它为什么不工作的原因。

您现有的代码很可能会显着加速。您是否在向 Excel 添加数据时禁用屏幕更新?是否禁用自动重新计算?您是将数据逐个单元格地推送到 Excel 中,还是一次性将整个范围推送到 Excel 中?一个细胞一个细胞地慢得要命。您希望最大限度地减少对 Excel 的调用次数,因为调用进程外 COM 服务器的 IPC 成本非常高。

于 2013-04-04T11:32:08.160 回答