我有一个需要快速运行的函数,因为我在具有500K-21M行的表的列公式中使用了它。
为了优化速度,我做了一些基准测试。我尽可能快地提高了速度,但仍然很慢。
我的函数使用一些矩阵作为查找表。我在先前的会话启动脚本中将它们加载到内存中。我将它们加载到名称空间限定的变量中,以防止混乱的全局名称空间。
作为冰雹玛丽,我尝试将它们加载到全局(非命名空间限定的)变量中。
令我惊讶的是,仅通过使用全局变量来保存我的静态查找表(而不是名称空间限定的表),函数主体的执行时间就不到1/10。要强调的是,在调用函数之前,这些表已经驻留在内存中;这不是关于填充它们,而是关于引用它们。
其他人有这种经历吗?
(我已经附上了调试屏幕的屏幕截图,因此您可以看到比较的时间安排。我只是在这里比较函数的主体,所以您看不到函数包装器。)

我可以确认,在JMP 15和JMP 16中,我们已经做了一些工作,以使名称空间查找更快,并且查找速度更快。 它们总是比使用全局名称空间慢,因为我们必须在冒号(:)的两侧进行查找,但是自原始发布以来,它们有了很大的改进。