为什么一个assign语句比不使用assign更有效?
同事说:
assign
a=3
v=7
w=8.
比以下更有效:
a=3.
v=7.
w=8.
为什么?
您总是可以自己对其进行测试并查看...,但是,是的,它效率稍高。还是那是我最后一次测试它。原因是编译器将这些语句合并在一起,并且生成的r代码要小一些。
但是效率几乎总是一个糟糕的理由。为了避免磁盘IO或选择更有效的算法,在这里和那里节省一微秒的时间显得微不足道。好理由:
0]在黑暗时代,每个程序的r代码限制为63k。这是减小r代码大小并保持在该限制以下的方法(好的,这可能不是“好的”理由)。另外一个有用的方法是您还可以避免使用DO ... END对,并进一步减小r代码的大小。
1)创建记录时,属于索引的字段将在分配时(而不是在事务结束时)写回到数据库中-将所有分配分组到单个语句中有助于避免不一致的脏数据读。 (这可能是仍然这样做的最好原因。)
2)可读性-您可以辩称,将连续的作业分组可以更清楚地显示您的意图,因此更具可读性。 (我喜欢这个原因,但并非所有人都同意。)
基本上是在做:
a=3.
v=7.
w=8.
与:相同:>
assign a=3. assign v=7. assign w=8.
这是3个独立的语句,因此需要更多的开销。因此效率较低。
Progress确实将一个或多个变量分配为一个语句。如果您不说Assign,则假设您将执行3条语句,而不是1条语句。使用一个assign语句时,R代码减少了20%-40%,性能提高了15%-20%。只能推测为什么如此,因为我找不到任何有关为何如此的信息。对于数据库字段,尤其是键/索引字段,这是很有意义的。对于变量,我只能假定它与进度如何管理其缓冲区以及如何在缓冲区之间复制数据有关。
ASSIGN将多个语句合并为一个。如果a,v和w是数据库中的字段,这意味着它将执行类似INSERT INTO(a,v,w)...的操作。
而不是插入(a)...插入(v)