自动填充使用一半核心

时间:2012-06-05 21:45:21

标签: excel excel-2010 excel-interop excel-dna

我在Excel中自动填充一些列(一次一个)。这些列使用我在ExcelDna中编写的UDF。使用taskmanager,我注意到只有一半的核心被使用。 Excel设置设置为“使用此计算机上的所有处理器”。所以我无法弄清楚为什么只有一半的核心在使用。想法?

1 个答案:

答案 0 :(得分:2)

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

* 参考:“多线程计算” “某些Excel功能不使用多线程计算,例如: 数据表计算(但对表的结构化引用确实使用MTC)。 用户定义的函数(但XLL函数可以启用多线程)。 XLM功能。 INDIRECT,CELL函数使用format2或address选项。 GETPIVOTDATA和其他涉及数据透视表或多维数据集的函数。 Range.Calculate和Range.CalculateRowMajorOrder。 圆形参考循环中的单元格。

由于它没有具体描述“自动填充” - 我将从并发的角度对其进行破解。如果其中一些是猜测,请原谅..

某些功能需要“有序”任务,这些任务不能轻易地跨处理器拆分,我们可能会怀疑填充是其中之一。 (它需要在某些模式中进行顺序操作。例如:步进1,1.2,1.4等)。在该示例中,处理器2不能仅从页面的​​中间开始而不执行新的/自定义独立计算。必须设计特殊功能。也许他们决定不为这些类型的场景编码。使用公式我甚至无法看到这种情况,因为您可能正在创建公式树。

根据公式树,其他操作是独立的(参见链接)。这强烈暗示Excel也不会对Complext公式树进行多处理..因此,如果连接了许多公式,它们(该树)将仅由一个处理器按顺序处理。

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