自动填充使用一半的核心

我在Excel中自动填充一些列(一次一个)。 这些列使用我在ExcelDna中编写的UDF。 使用taskmanager,我注意到只有一半的内核正在使用。 Excel设置设置为“使用此计算机上的所有处理器”。 所以我不明白为什么只有一半的核心在使用。 思考?

此页面包含一些有关Excel 2007+中的多处理的深入解释http://msdn.microsoft.com/en-us/library/office/aa730921(v=office.12).aspx#office2007excelperf_ExcelPerformanceImprovements

* 参考:“multithreading计算”一些Excelfunction不使用multithreading计算,例如:数据表计算(但对表的结构化引用使用MTC)用户定义的函数(但XLL函数可以启用multithreading)XLM函数INDIRECT,CELL函数使用format2或address选项GETPIVOTDATA和其他引用数据透视表或立方体的函数Range.Calculate和Range.CalculateRowMajorOrder。循环引用循环中的单元格。

由于它没有具体描述“自动填充” – 我会从并发的angular度对其进行破解。 请原谅,如果这是猜测..

某些function需要一个“按序”任务,不能轻易地在处理器之间进行拆分,我们可能会怀疑填充是其中之一。 (它需要在某些模式下进行顺序操作..例如:步进1,1.2,1.4等)。 在这个例子中,处理器2不能只从页面中间开始,而不执行新的/自定义的独立计算。 特殊的function将不得不被devise。 也许他们决定不为这些场景编码。 使用公式我不能看到这是可能的,因为你可能会创build一个公式树。

其他的操作是基于公式树(见链接)。 这强烈暗示了Excel不会对多个公式树进行多重处理。因此,如果有多个公式连接起来,它们(该树)将仅由一个处理器按顺序处理。

当然,对于这些情况,有各种各样复杂的变通办法(可能与编译器,SQL服务器等类似),但是上面的文档高度暗示微软devise它只是简化独立的任务。