Прошло много времени с тех пор, как я коснулся CF, но я могу дать некоторые подсказки в псевдокоде. С одной стороны, это выражение крайне неэффективно:
# theObject.Get_Item (строка) .Get_Properties () Get_Item (COL) .Get_Count () -. 1 #
Возьмем, к примеру, первую часть, Get_Item (row) - ваш код заставляет CF идти на извлечение строки и ее свойств для каждой итерации цикла # columnList #; и вдобавок ко всему, вы делаете это ДВАЖДЫ за каждую итерацию columnlist (один раз для цикла, а затем для внутреннего cfset). Если вы думаете об этом, ему нужно только извлечь строку для каждой итерации внешнего цикла (от # sfstart # до #cfend). Итак, в псевдокоде сделайте это:
для каждой строки между началом и концом
cfset props = # theobject.get_item (row) .get_properties () #
для каждого столбца в # columnlist #
cfset currentcol = # props.getitem (col) #
cfset count = # currentcol.getcount () - 1 #
элемент foreach от 0 до # count #
cfset # currentcol.getItem (item) # etc ...
Имеет смысл? Каждый раз, когда вы вводите цикл, кешируйте объекты, которые будут повторно использоваться в этой области (или дочерних областях) в переменной. Это означает, что вы захватываете объект столбца только один раз за итерацию цикла столбца. Все переменные, определенные во внешних областях, доступны во внутренних областях, как вы можете видеть из того, что я сделал выше. Я знаю заманчиво вырезать и вставить из предыдущих строк, но не знаю. Это только больно в конце концов.
надеюсь, это поможет,
Oisin