如何使DXL脚本运行得更快

时间:2019-04-02 18:36:53

标签: ibm-doors

我创建了一个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
              }

}

2 个答案:

答案 0 :(得分:0)

初始优化:

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'是/确实是什么。

答案 1 :(得分:0)

如果您的目标是加快脚本的执行速度,因为大多数对象都不是您所感兴趣的,那么我所知道的最有效的方法是过滤掉大多数不感兴趣的对象,例如, obj。“ Object Text”!=“”的过滤器将过滤掉标题,如果您仅对需求感兴趣,obj。“ Object Text”包含“ [Ss] hall”等。另存为视图供以后使用。 因为在m do {中尊重显示集,所以如果您不触摸大多数对象,它将大大加快显示速度! 希望这可以帮助。 唐