Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 并驾齐驱_C#_Excel_Parallel Processing_Parallel Extensions - Fatal编程技术网

C# 并驾齐驱

C# 并驾齐驱,c#,excel,parallel-processing,parallel-extensions,C#,Excel,Parallel Processing,Parallel Extensions,我有一个在excel中插入数据并创建图形的程序。所有的“数字运算”都在程序中完成(使用linq),因此excel仅用于创建图形。 最终的excel大约有300张工作表(50张数据表和250张图表)。这就是性能问题。虽然linq和regex的操作非常快,但excel生成所有图形需要4分钟以上的时间。我考虑了并行扩展,并将图形拆分为5个excel文件 我的问题是我是否在浪费时间。我的意思是:4分钟内有250张图表,就像每一张图表有1秒。excel并行生成图形是否应该比这更快?我还注意到,excel(

我有一个在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应用程序?

尝试使用excel这样做会带来很多痛苦。使用众多优秀的.net图表库之一制作图表

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


很有可能您现有的代码会显著加速。向Excel添加数据时是否禁用屏幕更新?是否禁用自动重新计算?您是一个单元格一个单元格地将数据推送到Excel中,还是一次推到整个范围?一个细胞接一个细胞的速度非常慢。您希望尽量减少调用Excel的次数,因为调用out-proc COM服务器的IPC成本非常高。

Excel是绝对要求吗?使用第三方图表工具生成图表可能会获得更好的性能。谷歌图表,即使我猜最简单的方法,找出它的实际编写一个样本和测试它!甚至是mschart控件。(与Excel非常相似)@DasKrümelmonster酷!我来看看mschart。您知道是否兼容所有excel图表选项(我指的是axis、series…),以及是否可以将mschart作为对象插入word文件(如excel图表)中?有第三方库可以创建通用excel图表,如我现在考虑的EPPLUSAbout.net图表库。这似乎是一个很好的选择。屏幕更新已禁用且不可见。我没有公式,数据是一次性推送整个范围的。问题是绘制图表。每个图形大约需要1秒,但是有250个。。。关于单独的工作簿,是的,但是相同的Excel。每个工作簿的应用程序还是每个工作簿的不同应用程序?@Alberto:我怀疑Excel支持MTA(但我没有证据),所以使用相同的Excel应用程序只会将所有调用封送到同一个STA线程,因此,您仍然在运行单线程。@Zarat您必须为每个线程创建一个单独的COM服务器实例。“我认为这是可能的。”阿尔贝托从你的评论判断,你肯定应该放弃Excel。你可以很容易地在没有线程的情况下完成这项工作,并期望每秒处理数百个图表。@DavidHeffernan我会试试EPPLUS和mschart。这两个图书馆看起来都很棒!