如何让 dxl 脚本更快 运行
How to get dxl scripts to run faster
我创建了一个遍历几个模块的每一行的 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
}
}
初步优化:
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 有一个名为字符串 table 的系统,它在内存中保存已声明的字符串,但不一定会在适当的时候尽最大努力清除它。通过不断地在循环中声明字符串,您可能会遇到该系统的内存限制。
问题是所有结果都变成 'DXL editor' 小 window,然后必须复制并粘贴到其他地方才能实际使用它。
二次优化:
// 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' is/does.
如果你的objective是为了加快脚本的执行速度,由于大部分objects你都没有兴趣,我知道的最有效的方法是过滤掉大部分objects 中不感兴趣的部分,例如,过滤器 obj."Object Text" != "" 会过滤掉标题,如果您只对需求感兴趣,obj."Object Text" 包含“[Ss]hall”等。保存为视图供以后使用。
for o in m do { 尊重显示集,所以如果你不触摸大部分 objects 它会加快很多!
希望这可以帮助。
唐
我创建了一个遍历几个模块的每一行的 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
}
}
初步优化:
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 有一个名为字符串 table 的系统,它在内存中保存已声明的字符串,但不一定会在适当的时候尽最大努力清除它。通过不断地在循环中声明字符串,您可能会遇到该系统的内存限制。
问题是所有结果都变成 'DXL editor' 小 window,然后必须复制并粘贴到其他地方才能实际使用它。
二次优化:
// 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' is/does.
如果你的objective是为了加快脚本的执行速度,由于大部分objects你都没有兴趣,我知道的最有效的方法是过滤掉大部分objects 中不感兴趣的部分,例如,过滤器 obj."Object Text" != "" 会过滤掉标题,如果您只对需求感兴趣,obj."Object Text" 包含“[Ss]hall”等。保存为视图供以后使用。 for o in m do { 尊重显示集,所以如果你不触摸大部分 objects 它会加快很多! 希望这可以帮助。 唐