Как заставить dxl-скрипты работать быстрее

Я создал сценарий DXL, который проходит через каждую строку пары модулей. Я распечатываю определенные строки и их информацию. Я делаю это с помощью цикла for, который проходит по строкам, и если он попадает в интересующую меня строку, я сохраняю элементы в столбцах этой строки в разные строковые переменные и печатаю эти строковые переменные. Сценарий не займет слишком много времени, если в модуле не так много строк, которые меня интересуют, но если я хочу запустить несколько модулей одновременно или если в модуле много строк, которые меня интересуют, сценарий может занять несколько часов. Я могу показать код, который у меня есть, если этого недостаточно для решения. Любая помощь будет оценена по достоинству!

Я попытался использовать список пропуска для хранения операторов печати в нем, а затем попытался просмотреть список пропуска для печати каждого значения, но это не заставило скрипт работать быстрее.

string sep=","
for o in m do
{
    string ver1= o."column1"


            if (checkIf(o) && (!(isDeleted(o))))
            {
                string ver2= o."column2"
                    string onum=number(o)
                     ""

                    string otext = o."Object Text"
                    print ver1 sep ver2 sep onum
              }

}


person AJHello    schedule 02.04.2019    source источник
comment
Если бы вы могли поделиться кодом, в DXL есть много возможностей для оптимизации времени.   -  person Russell Bregman    schedule 02.04.2019
comment
Я считаю, что моя ошибка в том, что я также просматриваю ссылки на элемент (не упомянул и не поместил это в пример кода... извините за это) и забыл закрыть их. Как правильно закрыть ссылку, если я пройду через них, выполнив for lr in o ‹-* do{...}   -  person AJHello    schedule 02.04.2019
comment
Что такое функция «checkIf»?   -  person Russell Bregman    schedule 03.04.2019


Ответы (2)


Начальная оптимизация:

for o in m do
{
    if (checkIf(o) && (!(isDeleted(o)))) {
        //This doesn't appear to be used?
        //string otext = o."Object Text"
        print o."column1" "," o."column2" "," number(o) "\n"
    }
}

Обоснование: в DOORS есть система, называемая таблицей строк, которая хранит объявленные строки в памяти и не обязательно делает все возможное для ее очистки, когда это необходимо. Постоянно объявляя строки в своем цикле, вы можете столкнуться с ограничениями памяти этой системы.

Проблема в том, что все результаты попадают в это маленькое окно «редактора DXL», а затем их нужно копировать и вставлять куда-то еще, чтобы фактически использовать его.

Вторичная оптимизация:

// Turn off runlimit for timing
pragma runLim , 0

// Set file location - CHANGE FOR YOUR COMPUTER
string csv_location = "C:/Users/Username/Desktop/Info_Collection.csv"

// Open stream
Stream out = append csv_location

// Set headers
out << "Module,Column 1,Column 2,Object Number" "\n"

// Define your loop constraints
Module m = current
Object o

// Run your loop
for o in m do
{
    if (checkIf(o) && (!(isDeleted(o)))) {
        //This doesn't appear to be used?
        //string otext = o."Object Text"
        out << fullName(m)","o."column1" "," o."column2" "," number(o) "\n"
    }
}

close out

Это позволит вам запускать один и тот же сценарий в разных модулях, выводя все в один и тот же CSV-файл, который затем можно загрузить в Excel или выбранный вами механизм обработки данных.

Благодаря этому сбор данных происходит за пределами DOORS, поэтому, если что-то пойдет не так, вы сможете отследить, где это произошло.

Моей третьей оптимизацией было бы использование списка модулей, скажем, в Excel в качестве входных данных и выполнение этого анализа, но это может зайти слишком далеко.

Если это не поможет, то мы можем приступить к изучению других вопросов.

Примечание. Я все еще хотел бы знать, что такое «checkIf».

person Russell Bregman    schedule 03.04.2019
comment
Когда я пишу в текстовый файл, он добавляется в конец текстового файла. Как мне перезаписать то, что уже есть в файле? - person AJHello; 02.05.2019
comment
Нашел ответ. Придется заменить «добавить» на «записать». - person AJHello; 03.05.2019

Если ваша цель — ускорить выполнение скрипта, так как большая часть объектов вас не интересует, то самый эффективный известный мне способ — это отфильтровать большую часть неинтересных объектов, например, фильтр, который is obj."Object Text" != "" будет отфильтровывать заголовки, если вас интересуют только требования, obj."Object Text" содержит "[Ss]hall" и т. д. Сохраните как представление для последующего использования. for o in m do { учитывает набор отображения, поэтому, если вы не прикасаетесь к большинству объектов, это значительно ускорит его! Надеюсь это поможет. Дон

person Don Fowler    schedule 25.04.2019